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.