Differences

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

Link to this comparison view

Next revisionBoth sides next revision
building-snacklinux [2022/12/18 09:17] – created snacsnocbuilding-snacklinux [2022/12/18 09:19] 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.