Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
building-snacklinux [2022/12/18 09:17] – created snacsnocbuilding-snacklinux [2022/12/19 02:00] snacsnoc
Line 1: Line 1:
-test+(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.