Merge commit '2fda71af117a90da5f496d8bb8105f0ee9e07420' as 'components/zinit'
This commit is contained in:
197
components/zinit/docs/installation.md
Normal file
197
components/zinit/docs/installation.md
Normal file
@@ -0,0 +1,197 @@
|
||||
# Installing Zinit
|
||||
|
||||
This guide provides detailed instructions for installing Zinit on various platforms.
|
||||
|
||||
## System Requirements
|
||||
|
||||
Zinit has minimal system requirements:
|
||||
|
||||
- Linux-based operating system
|
||||
- Root access (for running as init system)
|
||||
|
||||
## Pre-built Binaries
|
||||
|
||||
If pre-built binaries are available for your system, you can install them directly:
|
||||
|
||||
```bash
|
||||
# Download the binary (replace with actual URL)
|
||||
wget https://github.com/threefoldtech/zinit/releases/download/vX.Y.Z/zinit-x86_64-unknown-linux-musl
|
||||
|
||||
# Make it executable
|
||||
chmod +x zinit-x86_64-unknown-linux-musl
|
||||
|
||||
# Move to a location in your PATH
|
||||
sudo mv zinit-x86_64-unknown-linux-musl /usr/local/bin/zinit
|
||||
```
|
||||
|
||||
## Building from Source
|
||||
|
||||
### Prerequisites
|
||||
|
||||
To build Zinit from source, you'll need:
|
||||
|
||||
- Rust toolchain (1.46.0 or later recommended)
|
||||
- musl and musl-tools packages
|
||||
- GNU Make
|
||||
|
||||
#### Install Rust
|
||||
|
||||
If you don't have Rust installed, use rustup:
|
||||
|
||||
```bash
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
source $HOME/.cargo/env
|
||||
```
|
||||
|
||||
#### Install musl development tools
|
||||
|
||||
On Debian/Ubuntu:
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install musl musl-tools
|
||||
```
|
||||
|
||||
On Fedora:
|
||||
|
||||
```bash
|
||||
sudo dnf install musl musl-devel
|
||||
```
|
||||
|
||||
On Alpine Linux (musl is already the default libc):
|
||||
|
||||
```bash
|
||||
apk add build-base
|
||||
```
|
||||
|
||||
### Build Process
|
||||
|
||||
1. Clone the repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/threefoldtech/zinit.git
|
||||
cd zinit
|
||||
```
|
||||
|
||||
2. Build using make:
|
||||
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
This will create a statically linked binary at `target/x86_64-unknown-linux-musl/release/zinit`.
|
||||
|
||||
3. Install the binary:
|
||||
|
||||
```bash
|
||||
sudo cp target/x86_64-unknown-linux-musl/release/zinit /usr/local/bin/
|
||||
```
|
||||
|
||||
### Development Build
|
||||
|
||||
For development or debugging:
|
||||
|
||||
```bash
|
||||
make dev
|
||||
```
|
||||
|
||||
## Docker Installation
|
||||
|
||||
### Using the Provided Dockerfile
|
||||
|
||||
Zinit includes a test Docker image:
|
||||
|
||||
```bash
|
||||
# Build the Docker image
|
||||
make docker
|
||||
|
||||
# Run the container
|
||||
docker run -dt --device=/dev/kmsg:/dev/kmsg:rw zinit
|
||||
```
|
||||
> Don't forget to port-forward a port to get access to the Zinit proxy using the `-p XXXX:YYYY` flag when running the container.
|
||||
|
||||
### Custom Docker Setup
|
||||
|
||||
To create your own Dockerfile with Zinit:
|
||||
|
||||
```dockerfile
|
||||
FROM alpine:latest
|
||||
|
||||
# Install dependencies if needed
|
||||
RUN apk add --no-cache bash curl
|
||||
|
||||
# Copy the zinit binary
|
||||
COPY zinit /usr/local/bin/zinit
|
||||
RUN chmod +x /usr/local/bin/zinit
|
||||
|
||||
# Create configuration directory
|
||||
RUN mkdir -p /etc/zinit
|
||||
|
||||
# Add your service configurations
|
||||
COPY services/*.yaml /etc/zinit/
|
||||
|
||||
# Set zinit as the entrypoint
|
||||
ENTRYPOINT ["/usr/local/bin/zinit", "init", "--container"]
|
||||
```
|
||||
|
||||
## Using Zinit as the Init System
|
||||
|
||||
To use Zinit as the init system (PID 1) on a Linux system:
|
||||
|
||||
### On a Standard Linux System
|
||||
|
||||
1. Install Zinit as described above
|
||||
2. Create your service configurations in `/etc/zinit/`
|
||||
3. Configure your bootloader to use zinit as init
|
||||
|
||||
For GRUB, add `init=/usr/local/bin/zinit` to the kernel command line:
|
||||
|
||||
```bash
|
||||
# Edit GRUB configuration
|
||||
sudo nano /etc/default/grub
|
||||
|
||||
# Add init parameter to GRUB_CMDLINE_LINUX
|
||||
# Example:
|
||||
# GRUB_CMDLINE_LINUX="init=/usr/local/bin/zinit"
|
||||
|
||||
# Update GRUB
|
||||
sudo update-grub
|
||||
```
|
||||
|
||||
### In a Container Environment
|
||||
|
||||
For containers, simply set Zinit as the entrypoint:
|
||||
|
||||
```bash
|
||||
docker run -dt --device=/dev/kmsg:/dev/kmsg:rw \
|
||||
--entrypoint /usr/local/bin/zinit \
|
||||
your-image init --container
|
||||
```
|
||||
|
||||
## First-time Setup
|
||||
|
||||
After installation, you'll need to create a basic configuration:
|
||||
|
||||
1. Create the configuration directory:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /etc/zinit
|
||||
```
|
||||
|
||||
2. Create a simple service configuration:
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee /etc/zinit/hello.yaml
|
||||
exec: "echo 'Hello from Zinit!'"
|
||||
oneshot: true
|
||||
EOF
|
||||
```
|
||||
|
||||
3. Test Zinit without running as init:
|
||||
|
||||
```bash
|
||||
# For testing only - doesn't replace system init
|
||||
sudo zinit init
|
||||
```
|
||||
|
||||
If all is working correctly, you should see Zinit start and run your service.
|
||||
Reference in New Issue
Block a user