This is an old revision of the document!
(adapted from Github readme)
# Build system
* Linux is preferable to build with
Debian ``` apt-get install build-essential git libgmp-dev libmpc-dev flex bison bc ``` Optional: ``` apt-get install genisoimage #used for generating x86 ISO images ```
Mac OS* * Mac OS is incredibly difficult to get working alone to build the kernel, otherwise cross-compiling packages works * An alternative to a tradtional VM is to use something like [krunvm](https://github.com/containers/krunvm)
#### gcc ``` arch -arm64 brew install gcc@12 ```
If you have an alternate version of gcc installed, create symlinks: ``` cd /opt/homebrew/bin ln -s gcc-12 gcc ln -s g++-12 g++ ```
# Toolchain
## Build your own Compile your own toolchain with [musl-cross-make](https://github.com/richfelker/musl-cross-make.git)
`git clone https://github.com/richfelker/musl-cross-make.git`
### arm64
``` TARGET=aarch64-linux-musl make TARGET=aarch64-linux-musl make install ```
### x86
``` TARGET=i486-linux-musl make TARGET=i486-linux-musl make install ```
### TODO:x86_64
Installs to `output/` Add the toolchain to your shell's PATH: `export PATH=$PATH:/path/to/out/bin`
# Building SnackLinux
## Environment vars
`JOBS` Set number of parallel jobs to create, defaults to -j8 Example `make busybox JOBS=-j12`
### Architechtures Change target arch by using switches with make: ``` arch=aarch64 arch=x86 arch=x86_64 ```
Building for arm64:
Example `make busybox arch=aarch64 JOBS=-j4`
Defaults to x86
## Versions See `defs.sh` for kernel and package versions
## Getting started
Download source tars and link
`bash ./download_prereq.sh `
Set the amount of parallel jobs to run when using make ``` export JOBS=j16 ```
Compile the kernel
``` make kernel ```
Build musl, Bash and BusyBox ``` make system ```
Install to `/opt/snacklinux_rootfs` directory
``` make install ```
Next step: [booting](#Booting)
#### Compile individual packages
#### Linux -
``` make kernel ```
#### musl - ``` make musl ``` #### BusyBox -
``` make busybox ```
#### Bash -
``` make bash ``` #### Binutils (optional)
``` make binutils ```
#### Syslinux
``` make syslinux ```
If you would also like to install binutils, use:
``` make binutils-install ```
#### stripping symbols
This target strips all debug symbols files matching LSB executable, shared object or ar archive ``` make arch=arm64 strip-fs ``` # Booting Prerequisites: ``` #Base files (/etc) git clone https://github.com/snacsnoc/snacklinux-base.git cp -R snacklinux-base/rootfs/* /opt/snacklinux_rootfs/
#Create ./dev files ./createdev.sh
#fbpkg (package manager) git clone https://github.com/snacsnoc/fbpkg.git cp fbpkg/src/fbpkg /opt/snacklinux_rootfs/usr/bin ``` ## ISO
Run `make iso`. The output ISO will be in `iso/`
Note: you do not have to have the toolchain to create the ISO
## qemu Create a gzipped rootfs by running: ``` cd /opt/snacklinux_rootfs/; find . -print | cpio -o -H newc –quiet | gzip -6 > ~/rootfs.gz ```
Packages
Read the [Packages page](http://snacklinux.org/packages) for building packages. For SnackLinux's package manager fbpkg, see [here](https://github.com/snacsnoc/fbpkg).
Hacking
Edit anything in `/opt/snacklinux_rootfs`, it is the root filesystem. The kernel can also be recompiled to fit your needs.
The `boot/isolinux` directory is where ISOLINUX resides, edit the menu to adjust to your needs.