building-snacklinux

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.

building-snacklinux.1671355169.txt.gz · Last modified: 2022/12/18 09:19 by snacsnoc
CC Attribution-Share Alike 4.0 International Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International