|
|
#!/usr/bin/env zsh
|
|
|
|
|
|
# TODO:
|
|
|
#
|
|
|
# - Install and create rootfs.
|
|
|
# - Create disk images.
|
|
|
# - Create .iso files.
|
|
|
|
|
|
# TODO:
|
|
|
#
|
|
|
# - Setup the filesystems and/or partition the disks.
|
|
|
# - Get an arbitrary, random mountpoint (both /media or /mnt will do).
|
|
|
# - Setup root’s password.
|
|
|
# - Configure the target system’s keyboard layout (should be possible
|
|
|
# to disable it)
|
|
|
# - Install syslinux, through syslinux/setup.
|
|
|
|
|
|
autoload -U colors
|
|
|
colors
|
|
|
|
|
|
set -e
|
|
|
|
|
|
function info {
|
|
|
echo "${fg_bold[green]} * ${fg_bold[white]}$@${reset_color}"
|
|
|
}
|
|
|
|
|
|
function rootfs/setup {
|
|
|
local ROOTFS="$1"
|
|
|
local REPO_URL=http://weirdos.karchnu.fr
|
|
|
|
|
|
info "Installing initial packages."
|
|
|
|
|
|
apk add \
|
|
|
--root $ROOTFS --initdb \
|
|
|
-U --allow-untrusted -X $REPO_URL \
|
|
|
busybox apk-tools weirdos-keys rc service
|
|
|
|
|
|
if [[ ! -f "$ROOTFS/etc/apk/repositories" ]]; then
|
|
|
echo "$REPO_URL" > "$ROOTFS/etc/apk/repositories"
|
|
|
fi
|
|
|
}
|
|
|
|
|
|
function rootfs/setup-dev {
|
|
|
local ROOTFS="$1"
|
|
|
|
|
|
info "Installing the development environment packages."
|
|
|
|
|
|
apk add \
|
|
|
--root $ROOTFS \
|
|
|
-U \
|
|
|
zsh gcc musl musl-dev \
|
|
|
libyaml-dev libevent-dev gc-dev pcre-dev \
|
|
|
crystal package
|
|
|
}
|
|
|
|
|
|
function rootfs/mount {
|
|
|
local ROOT="$1"
|
|
|
|
|
|
info "Mounting pseudo-filessystems."
|
|
|
|
|
|
mount --bind /dev $ROOT/dev
|
|
|
mount -t proc none $ROOT/proc
|
|
|
mount -t sysfs none $ROOT/sys
|
|
|
|
|
|
cp -L /etc/resolv.conf $ROOT/etc/
|
|
|
}
|
|
|
|
|
|
function rootfs/unmount {
|
|
|
local ROOT="$1"
|
|
|
|
|
|
info "Unmounting pseudo-filesystems."
|
|
|
|
|
|
umount $ROOT/{sys,proc,dev}
|
|
|
}
|
|
|
|
|
|
function installer/parse-opts {
|
|
|
local failure=false
|
|
|
zparseopts -D -E -- -root:=root r:=root -help=help h=help m=mount -mount=mount u=unmount -unmount=unmount
|
|
|
|
|
|
root=${root[-1]}
|
|
|
[[ ! $root ]] && failure=true
|
|
|
|
|
|
[[ -n "${help[@]}" ]] && help=true || help=false
|
|
|
|
|
|
if $help || $failure; then
|
|
|
echo "usage: $0 [options]"
|
|
|
echo
|
|
|
echo " -r DIR, --root DIR Specifies where to bootstrap the rootfs."
|
|
|
echo " -m, --mount Use with -r to only mount a rootfs without bootstrapping it."
|
|
|
echo " -u, --unmount Use with -r to only unmount a rootfs without bootstrapping it."
|
|
|
echo " -h, --help Prints this message and exits."
|
|
|
|
|
|
if $help; then
|
|
|
exit 0
|
|
|
else
|
|
|
exit 1
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
unset help
|
|
|
}
|
|
|
|
|
|
# Export WEIRDOS_SOURCE if you want to import this script’s functions and
|
|
|
# utilities. If you do, no CLI parsing will be done and no function will
|
|
|
# be called, so it’ll really be a simple import of functions!
|
|
|
if [[ -z "$WEIRDOS_SOURCE" ]]; then
|
|
|
installer/parse-opts "$@"
|
|
|
|
|
|
if [[ -n "$mount" ]]; then
|
|
|
rootfs/mount "$root"
|
|
|
exit 0
|
|
|
fi
|
|
|
|
|
|
if [[ -n "$unmount" ]]; then
|
|
|
rootfs/unmount "$root"
|
|
|
exit 0
|
|
|
fi
|
|
|
|
|
|
# INITIAL SYSTEM BOOTSTRAP
|
|
|
##fs/setup
|
|
|
##fs/mount
|
|
|
|
|
|
rootfs/setup "$root"
|
|
|
|
|
|
rootfs/mount "$root"
|
|
|
##syslinux/setup
|
|
|
|
|
|
# SYSTEM CONFIGURATION
|
|
|
##rootfs/setup-passwd
|
|
|
##rootfs/setup-keyboard
|
|
|
# Installs default package sets? Preconfigures common services, like
|
|
|
# network-related services, cron, and so on?
|
|
|
#rootfs/setup-dev "$root"
|
|
|
|
|
|
# CLEANUP
|
|
|
rootfs/unmount "$root"
|
|
|
#fs/unmount
|
|
|
fi
|
|
|
|