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.1671415202.txt.gz ยท Last modified: 2022/12/19 02:00 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