blob: e39cab5606fb41ab68d0516dec261584229523e2 (
plain) (
tree)
|
|
#!/bin/sh
def_arch=$(uname -m)
def_ver="1.0-beta4"
declare -r PROGNAME=$(basename $0)
warn() {
printf '>>> '
printf '\033[01;33mWARNING\033[00;39m '
printf '>>> '
printf '\033[01;33mWARNING\033[00;39m '
printf '>>> '
printf '\033[01;33mWARNING\033[00;39m '
printf '>>> '
printf '\033[01;33mWARNING\033[00;39m '
printf '>>>\n'
}
fatal() {
printf '>>> '
printf '\033[01;31mERROR\033[00;39m '
printf '>>> '
printf '\033[01;31mERROR\033[00;39m '
printf '>>> '
printf '\033[01;31mERROR\033[00;39m '
printf '>>> '
printf '\033[01;31mERROR\033[00;39m '
printf '>>>\n'
}
ensure_commands() {
if ! type apk>/dev/null 2>/dev/null; then
fatal
printf 'You must have apk installed. On Gentoo, see sys-devel/apk-tools.\n'
exit -1
fi
if ! type tar>/dev/null 2>/dev/null; then
fatal
printf 'You must have tar installed.\n'
exit -1
fi
}
usage() {
printf 'usage: %s [-a ARCH] [--mini] [-s] [-v VERSION] [--help]\n\n' $PROGNAME
printf 'Create an Adélie Linux root FS tarball (.TXZ) using the specified parameters.\n\n'
printf 'Default ARCH: %s\n' $def_arch
printf 'Default VERSION: %s\n' $def_ver
}
while [ -n "$1" ]; do
case $1 in
-a | --arch)
shift
declare -r MY_ARCH=$1
;;
-h | --help)
usage
exit
;;
--mini)
declare -r MINI=yes
;;
-s | --sign)
declare -r SIGN=yes
;;
-v | --version)
shift
declare -r MY_VER=$1
;;
*)
usage >&2
exit -1
;;
esac
shift
done
set -a
declare -r ARCH=${MY_ARCH:-$def_arch}
declare -r LDARCH=${LDARCH:-$ARCH}
declare -r PHASE=${MY_PHASE:-all}
declare -r VERSION=${MY_VER:-$def_ver}
declare -r URL=${MY_URL:-https://distfiles.adelielinux.org/adelie/$VERSION/}
set +a
ensure_commands
header() {
printf '\033[01;32m * \033[37m%s\033[00;39m\n' "$1"
}
header 'Adélie Linux Root FS Tarball Creation Tool'
printf '\n'
clean_dirs() {
warn
printf 'This will erase all files at the directories %s/rootfs-%s.\n\n' `pwd` $ARCH
printf 'When you are ready, press RETURN. To cancel, press Ctrl-C.\n'
read
rm -rf rootfs-$ARCH
mkdir rootfs-$ARCH
mkdir -p out
}
install_pkgs() {
header "Installing base system to tar root..."
if test -n "${MINI+mini}"; then
declare -r PACKAGES="adelie-core dash-binsh"
declare -r ARCH_PKGS=""
else
declare -r PACKAGES=$(cat packages 2>/dev/null || fatal 'No core packages specified')
declare -r ARCH_PKGS=$(cat packages-$ARCH 2>/dev/null || echo '')
fi
mkdir -p rootfs-$ARCH/etc/apk/keys
cp 'packages@adelielinux.org.pub' rootfs-$ARCH/etc/apk/keys/
# XXX: Handle pre-install scripts.
mkdir -p rootfs-$ARCH/dev
mknod rootfs-$ARCH/dev/urandom c 1 9
mkdir -p rootfs-$ARCH/usr/sbin
cp addgroup adduser rootfs-$ARCH/usr/sbin/
apk --arch $ARCH \
-X "$URL/system/$EXTRA_MIRROR" \
-X "$URL/user/$EXTRA_MIRROR" \
-U --root rootfs-$ARCH --initdb add $PACKAGES $ARCH_PKGS
}
make_structure() {
if test -n "${MINI+mini}"; then
echo 'adelie-mini' > rootfs-$ARCH/etc/hostname
else
echo 'adelie-root' > rootfs-$ARCH/etc/hostname
mkdir -p rootfs-$ARCH/etc/runlevels/{sysinit,boot,default,shutdown}
echo 'mtab_is_file=no' > rootfs-$ARCH/etc/conf.d/mtab
for siservice in udev udev-trigger lvmetad; do
ln -s /etc/init.d/$siservice \
rootfs-$ARCH/etc/runlevels/sysinit/$siservice
done
for bootservice in root binfmt bootmisc fsck hostname hwclock keymaps \
localmount loopback modules mtab procfs sysctl sysfsconf termencoding \
tmpfiles.setup urandom; do
ln -s /etc/init.d/$bootservice \
rootfs-$ARCH/etc/runlevels/boot/$bootservice
done
cp AdelieTux.icns rootfs-$ARCH/.VolumeIcon.icns
# Put a copy of the kernel(s) in the kernels-$ARCH/ directory, so that
# users may download them for netbooting or such.
mkdir -p out/kernels/$ARCH
cp -r rootfs-$ARCH/boot/* out/kernels/$ARCH/
fi
cat >rootfs-$ARCH/etc/fstab <<- FSTAB
# Welcome to Adélie Linux.
# This fstab(5) is for the live media only. Edit for use for your installation.
tmpfs /tmp tmpfs defaults 0 1
proc /proc proc defaults 0 1
FSTAB
cat >rootfs-$ARCH/etc/resolv.conf <<- RESOLVE
nameserver 2620:fe::fe
nameserver 9.9.9.9
nameserver 149.112.112.112
RESOLVE
cat >rootfs-$ARCH/etc/apk/repositories <<-REPOS
https://distfiles.adelielinux.org/adelie/$VERSION/system/$EXTRA_MIRROR
https://distfiles.adelielinux.org/adelie/$VERSION/user/$EXTRA_MIRROR
REPOS
}
tar_it() {
header 'Creating file system archive...'
cd rootfs-$ARCH
tar -cJf ../out/adelie-rootfs-${MINI+mini-}$ARCH-$VERSION-$(date +%Y%m%d).txz .
}
# in case we want to add phase support like adelie-build-cd has later
case $PHASE in
clean)
clean_dirs
;;
install)
install_pkgs
make_structure
;;
tar)
tar_it
;;
*)
clean_dirs
install_pkgs
make_structure
tar_it
;;
# *)
# fatal
# printf 'Unknown phase %s. Stop.\n' $PHASE
# ;;
esac
|