fs-cooks uses debootstrap to pull core Linux packages to build linux traballs, all implementations are developer-friendly and mostly kinda udroid centric (for now)
the top-level contains some example build scripts which are lightweight to build and beginning of directories
.
├── build-jammy.sh -> cook.sh
├── cook.sh
├── build
├── core
├── out
├── plugins
├── README.md
└── setup.sh
here:
- build: Contains scripts, Dockerfiles for building different variants (outdated)
- core: contains binaries and different sources that used in the build process
- out: All the filesystem and tarball packages are created here
- plugins: contains scripts that combine core sources to make tarball building easy
important files/folders to notice
- contains functions that can be used for cmd line building and integrating in scripts
- Important : use these functions after
source plugins/envsetup - useful functions in
envsetup:
do_mount(): mounts the rootfs directories in recursive after checking is directories already mounted
takes one argument:
location of rootfs directory
do_mount "/path/to/fs"do_build() bootstraps linux to a directories of specified arch
takes two arguments:
location of rootfs directory|arch
do_build "out/udroid-test" "arm64"available architectures :
amd64,arm64,armhf
do_compress() compress the rootfs directory into an archive
takes one argument:
location of rootfs directory
# archiving into .tar.gz
OVERRIDER_COMPRESSION_TYPE="gzip"
# compressing udroid-test directory
do_compress "out/udroid-test"
# output would be "out/udroid-test.tar.gz"default format is
bzip( .tar.xz ) others :gzip( .tar.gz ) ,lz( .tar.lz ) ,zstd( .zst )
in one line: able to produce multiarch ubuntu hirsute & impish tarballs with
source plugins/envsetup
SUITE=jammy
do_build "out/fs" "arm64"build-jammy.sh: to build raw ubuntu 22.04 tarballs
others are experimental ( may break things )
recommended for devolopers
do_mount(): mounts target filesystem directories ( recursive mode )do mount /path/to/fsis_mounted(): checks is filesystem mounted to hostlist_parser(): convets new line separated contents in a file to list variabledepends_on(): for locking dependencies ( checks is a package is installed withcommand)dpkg_depends_on(): check for dependencies with dpkg for non-binarie bundle applicationssee_for_directory(): check for directories & setesto false if not foundno_to_directory(): exits if directory given is presentforeign_arch(): checks does target arch matches with host architectureincludes_packages(): takes care of extrapackges when a variableINCLUDE_PACKAGESis set with packagesdo_build(): bootstraps linux to with target arch to target directoriedo_second_stage(): if foreign arch triggers second stage-
do_qemu_user_emulation(): sets up qemu binaries in chroot
setup_user(): setup a user in chroot ifENABLE_USER_SETUPis set to truedo_chroot_ae(): to run command in chroot-
do_chroot_proot_ae: use proot instead of chroot in termux
-
run_cmd(): alternative fordo_chroot_ae()
-
run_shell_script(): to run a specific script, alternative fordo_chroot_ae()
-
install_pkg(): to install a specific package inside chroot, alternative fordo_chroot_ae()
do_compress(): takes care of compressing tarballs without messy device file-
do_tar_gzip(): to compress in gzip format
-
do_tar_bzip(): to compress in bzip format
-
do_tar_lz4(): to compress in lzip/lz4 format
-
do_tar_zstd(): to compress in zstd format
arch_translate(): takes care of translating arch to find qemu static buildsCOPY(): to copy files to target filesystemdie(): to echo an error message & exit ifENABLE_EXITis set to truewarn(): likedie()without exitshout(): for printing logsmsg(): for normal echo
ENABLE_EXIT( true | false ): to exit on errorENABLE_USER_SETUP( true | false ): to setup a user, using withFS_USERandFS_PASS
ENABLE_USER_SETUP=true
FS_USER="your username"
FS_PASS="your password"INCLUDE_PACKAGES: to set extra packages to install in the bootstrap processSUITE: to set target suite to bootstrap
SUDO(not user-defined) : if non-root user then value is path of sudo, if root no value/null string
- just make sure not to mess up with existing function ( inform maintainers if any changes made in existing functions ) 👌