automate/020_sbuild.sh

280 lines
8.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bun/env bash
sudo apt install -y sbuild schroot
# corresponds to Debian 7 Wheezy 20170617T034212Z
# Devuan 1.0 Jessie corresponds to Debian 8 Jessie 20180623T023722Z
# Devuan 2.0 ASCII corresponds to Debian 9 Stretch 20200717T204551Z
# Devuan 3.0 Beowulf corresponds to Debian 10.4 Buster 20230611T103552Z
# Devuan 4.0 Chimaera corresponds to Debian 11.1 Bullseye20230611T103552Z
# Devuan 5.0 Daedalus corresponds to Debian 12 Bookworm 20231007T150030Z
# Devuan 6.0 Excalibur corresponds to Debian 13 Trixie testing
# Devuan 7.0 Freia corresponds to Debian 14 Forky
# Devuan Ceres corresponds to Debian Sid unstable
UNSTABLE="ceres"
# TESTING="excalibur"
STABLE="daedalus"
OLD_STABLE="chimaera"
# distro="devuan"
# location="/srv/chroot"
# tarball="${release}-sbuild.tgz"
R="/space/code_repositories/decode-os/os-build-system/arm-sdk"
strapdir="$R/tmp/devuan-arm64-build/bootstrap"
arch="arm64"
release="daedalus"
mirror="http://deb.devuan.org/merged/" # apt url for debootsrap and dpks.
apt_proxy="http://192.168.1.49:3142" # apt-cacher.-ng proxy
schroot_config="arm-sdk"
sources_dir="$R/tmp/kernels/rockpro64" # where the sources outside the chroot are palced.
sources_dest="/scratch" # where to mount the sources you wish to build in the chroot.
conf_print_schroot() {
fn conf_print_schroot
req=(OLD_STABLE STABLE TESTING UNSTABLE)
ckreq || return 1
cat <<-EOF
# schroot chroot definitions.
# See schroot.conf(5) for complete documentation of the file format.
#
# Please take note that you should not add untrusted users to
# root-groups, because they will essentially have full root access
# to your system. They will only have root access inside the chroot,
# but that's enough to cause malicious damage.
#
# Per chroot configuration should be put in /etc/schroot/chroot.d/<name>
# and this file reserved for default values for all chroots.
#
# This is mostly for sbuild created chroots who's creation time
# settings are limited.
#
[*]
type=directory
union-type=overlay
command-prefix=eatmydata,ccache
users=default
source-users=default
script-config=/etc/schroot/default/config
preserve-environment=true
EOF
}
# conf_print_schroot | sudo tee /etc/schroot/schroot.conf >/dev/null
#-------------------------------------------------------------------------------
## sbuild configuration
# See: https://wiki.ubuntu.com/SimpleSbuild
# cp /usr/share/doc/sbuild/examples/example.sbuildrc ~/.sbuildrc
conf_print_sbuildrc() {
fn conf_print_sbuildrc
req=(release)
ckreq || return 1
cat <<-EOF | sudo tee ~/.sbuildrc
# sbuild configuration file
#
# See sbuild.conf(5) for complete documentation of the file format.
#
# Name to use as override in .changes files for the Maintainer: field
# (mandatory, no default!).
\$maintainer_name='Your Name <user@ubuntu.com>';
# Default distribution to build.
\$distribution = "${release}";
# Build arch-all by default.
\$build_arch_all = 1;
# When to purge the build directory afterwards; possible values are "never",
# "successful", and "always". "always" is the default. It can be helpful
# to preserve failing builds for debugging purposes. Switch these comments
# if you want to preserve even successful builds, and then use
# "schroot -e --all-sessions" to clean them up manually.
\$purge_build_directory = 'successful';
\$purge_session = 'successful';
\$purge_build_deps = 'successful';
# \$purge_build_directory = 'never';
# \$purge_session = 'never';
# \$purge_build_deps = 'never';
# Directory for writing build logs to
\$log_dir=\$ENV{HOME}."/devuan/logs";
# don't remove this, Perl needs it:
1;
EOF
}
# conf_print_sbuildrc | sudo tee ~/.sbuildrc >/dev/null
# Create ~/.mk-sbuild.rc:
conf_print_mk_sbuild_rc() {
fn conf_print_mk_sbuild_rc
req=(apt_proxy)
ckreq || return 1
cat <<-EOF
SCHROOT_CONF_SUFFIX="source-root-users=root,sbuild,admin
source-root-groups=root,sbuild,admin
preserve-environment=true"
# you will want to undo the below for stable releases, read 'man mk-sbuild' for details
# during the development cycle, these pockets are not used, but will contain important
# updates after each release of Ubuntu
SKIP_UPDATES="1"
SKIP_PROPOSED="1"
# if you have e.g. apt-cacher-ng around
# DEBOOTSTRAP_PROXY=${apt_proxy}
EOF
}
# conf_print_mk-sbuild_rc | sudo tee ~/.mk-sbuild.rc >/dev/null
#-------------------------------------------------------------------------------
# Create the custom schroot config directory and contents.
mkdir -p /etc/schroot/${schroot_config}
conf_print_chroot_config() {
fn conf_print_chroot_config
req=(schoot_config sources_dir sources_dest)
ckreq || return 1
cat <<-EOF | sudo tee /etc/schroot/${schroot_config}/copyfiles
# Files to copy into the chroot from the host system.
#
# <source-and-destination>[ <destination>]
/etc/resolv.conf
/etc/hosts
/etc/sudoers
~/.Xauthority
EOF
cat <<-EOF | sudo tee /etc/schroot/${schroot_config}/fstab
# fstab: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
# <file system> <mount point> <type> <options> <dump> <pass>
/proc /proc none rw,bind 0 0
/sys /sys none rw,bind 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
${sources_dir} ${sources_dest} none rw,bind 0 0
/tmp /tmp none rw,bind 0 0
# It may be desirable to have access to /run, especially if you wish
# to run additional services in the chroot. However, note that this
# may potentially cause undesirable behaviour on upgrades, such as
# killing services on the host.
#/run /run none rw,bind 0 0
#/run/lock /run/lock none rw,bind 0 0
#/dev/shm /dev/shm none rw,bind 0 0
#/run/shm /run/shm none rw,bind 0 0
EOF
cat <<-EOF | sudo tee /etc/schroot/${schroot_config}/nssdatabases
# System databases to copy into the chroot from the host system.
#
# <database name>
passwd
shadow
group
gshadow
services
protocols
networks
hosts
EOF
cat <<-EOF | sudo tee /etc/schroot/${schroot_config}/config
# Filesystems to mount inside the chroot.
FSTAB="/etc/schroot/custom/fstab"
# Files to copy from the host system into the chroot.
COPYFILES="/etc/schroot/custom/copyfiles"
# System NSS databases to copy into the chroot.
NSSDATABASES="/etc/schroot/custom/nssdatabases"
EOF
}
#-------------------------------------------------------------------------------
# sudo sbuild-createchroot \
# --arch=${arch} \
# --make-sbuild-tarball=${location}/${tarball} \
# ${release} \
# ${location}/${release} \
# ${mirror}
# this is the file created automatically by the create line above.
# cat <<-EOF | sudo tee /etc/schroot/chroot.d/daedalus-arm64-sbuild-lNGdIk
# [daedalus-arm64-sbuild]
# description=Debian daedalus/arm64 autobuilder
# groups=root,sbuild
# root-groups=root,sbuild
# profile=sbuild
# type=file
# file=/srv/chroot/daedalus-sbuild.tgz
# EOF
#
# cat <<-EOF | sudo tee -a /etc/schroot/schroot.d/${release}_${arch}
# [${release}-file]
# description=${distro} ${release} (custom)
# file=/srv/chroot/${release}.tar.gz
# location=/${location}
# groups=sbuild
# EOF
conf_print_chroot_d() {
fn conf_print_chroot_d
req=(strapdir arch release schroot_config)
ckreq || return 1
cat <<-EOF | sudo tee -a /etc/schroot/schroot.d/${release}_${arch}
[${release}_${arch}]
description=${release} (${arch}) for devuan arm-sdk
type=directory
directory=${strapdir}
union-type=overlay # aufs, overlay and unionfs
command-prefix=eatmydata,ccache
users=default
source-users=default
script-config=${schroot_config}/config
preserve-environment=true
EOF
}
# conf_print_chroot_d | sudo tee /etc/schroot/schroot.d/${release}_${arch} >/dev/null
# zfs snapshot examples
zfs_snapshot="rpool/CHROOT/sid"
sudo zfs snapshot ${zfs_snapshot}@initial
sudo zfs create ${zfs_snapshot}
sudo sbuild-createchroot \
--arch=${arch} \
--include=debhelper,eatmydata,ccache \
--chroot-mode=schroot \
--components=main contrib non-free \
${release} \
${zfs_snapshot} \
${mirror}
# cat <<-EOF | sudo tee /etc/schroot/chroot.d/sid-zfs-snapshot
# [sid-zfs-snapshot]
# description=Devuan sid ZFS snapshot
# type=zfs-snapshot
# zfs-dataset=rpool/CHROOT/sid
# zfs-snapshot=initial
# groups=root,sbuild
# root-groups=root,sbuild
# EOF
# schroot -c sid-zfs-snapshot
# [${UNSTABLE}-znap]
# type=zfs-snapshot
# description=Devuan ${UNSTABLE} ZFS snapshot
# groups=sbuild,root
# root-users=rleigh
# root-groups=root,sbuild
# source-root-users=rleigh
# zfs-dataset=rpool/CHROOT/${UNSTABLE}
# mount-options=-o atime,sync,user_xattr
# zfs-snapshot-options=-o checksum=off