123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- #!/bin/bash
- set -eu
- . ./lib.sh
- PROGNAME=$(basename "$0")
- ARCH=$(uname -m)
- IMAGES="base"
- TRIPLET=
- REPO=
- DATE=$(date -u +%Y%m%d)
- usage() {
- cat <<-EOH
- Usage: $PROGNAME [options ...] [-- mklive options ...]
- Wrapper script around mklive.sh for several standard flavors of live images.
- Adds void-installer and other helpful utilities to the generated images.
- OPTIONS
- -a <arch> Set architecture (or platform) in the image
- -b <variant> One of base, enlightenment, xfce, mate, cinnamon, gnome, kde,
- lxde, lxqt, or xfce-wayland (default: base). May be specified multiple times
- to build multiple variants
- -d <date> Override the datestamp on the generated image (YYYYMMDD format)
- -t <arch-date-variant>
- Equivalent to setting -a, -b, and -d
- -r <repo> Use this XBPS repository. May be specified multiple times
- -h Show this help and exit
- -V Show version and exit
- Other options can be passed directly to mklive.sh by specifying them after the --.
- See mklive.sh -h for more details.
- EOH
- }
- while getopts "a:b:d:t:hr:V" opt; do
- case $opt in
- a) ARCH="$OPTARG";;
- b) IMAGES="$OPTARG";;
- d) DATE="$OPTARG";;
- r) REPO="-r $OPTARG $REPO";;
- t) TRIPLET="$OPTARG";;
- V) version; exit 0;;
- h) usage; exit 0;;
- *) usage >&2; exit 1;;
- esac
- done
- shift $((OPTIND - 1))
- INCLUDEDIR=$(mktemp -d)
- trap "cleanup" INT TERM
- cleanup() {
- rm -rf "$INCLUDEDIR"
- }
- include_installer() {
- if [ -x installer.sh ]; then
- MKLIVE_VERSION="$(PROGNAME='' version)"
- installer=$(mktemp)
- sed "s/@@MKLIVE_VERSION@@/${MKLIVE_VERSION}/" installer.sh > "$installer"
- install -Dm755 "$installer" "$INCLUDEDIR"/usr/bin/void-installer
- rm "$installer"
- else
- echo installer.sh not found >&2
- exit 1
- fi
- }
- setup_pipewire() {
- PKGS="$PKGS pipewire alsa-pipewire"
- case "$ARCH" in
- asahi*)
- PKGS="$PKGS asahi-audio"
- SERVICES="$SERVICES speakersafetyd"
- ;;
- esac
- mkdir -p "$INCLUDEDIR"/etc/xdg/autostart
- ln -sf /usr/share/applications/pipewire.desktop "$INCLUDEDIR"/etc/xdg/autostart/
- mkdir -p "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d
- ln -sf /usr/share/examples/wireplumber/10-wireplumber.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
- ln -sf /usr/share/examples/pipewire/20-pipewire-pulse.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
- mkdir -p "$INCLUDEDIR"/etc/alsa/conf.d
- ln -sf /usr/share/alsa/alsa.conf.d/50-pipewire.conf "$INCLUDEDIR"/etc/alsa/conf.d
- ln -sf /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf "$INCLUDEDIR"/etc/alsa/conf.d
- }
- build_variant() {
- variant="$1"
- shift
- IMG=void-live-${ARCH}-${DATE}-${variant}.iso
- # el-cheapo installer is unsupported on arm because arm doesn't install a kernel by default
- # and to work around that would add too much complexity to it
- # thus everyone should just do a chroot install anyways
- WANT_INSTALLER=no
- case "$ARCH" in
- x86_64*|i686*)
- GRUB_PKGS="grub-i386-efi grub-x86_64-efi"
- GFX_PKGS="xorg-video-drivers xf86-video-intel"
- GFX_WL_PKGS="mesa-dri"
- WANT_INSTALLER=yes
- TARGET_ARCH="$ARCH"
- ;;
- aarch64*)
- GRUB_PKGS="grub-arm64-efi"
- GFX_PKGS="xorg-video-drivers"
- GFX_WL_PKGS="mesa-dri"
- TARGET_ARCH="$ARCH"
- ;;
- asahi*)
- GRUB_PKGS="asahi-base asahi-scripts grub-arm64-efi"
- GFX_PKGS="mesa-asahi-dri"
- GFX_WL_PKGS="mesa-asahi-dri"
- KERNEL_PKG="linux-asahi"
- TARGET_ARCH="aarch64${ARCH#asahi}"
- if [ "$variant" = xfce ]; then
- info_msg "xfce is not supported on asahi, switching to xfce-wayland"
- variant="xfce-wayland"
- fi
- ;;
- esac
- A11Y_PKGS="espeakup void-live-audio brltty"
- PKGS="dialog cryptsetup lvm2 mdadm void-docs-browse xtools-minimal xmirror chrony tmux $A11Y_PKGS $GRUB_PKGS"
- FONTS="font-misc-misc terminus-font dejavu-fonts-ttf"
- WAYLAND_PKGS="$GFX_WL_PKGS $FONTS orca"
- XORG_PKGS="$GFX_PKGS $FONTS xorg-minimal xorg-input-drivers setxkbmap xauth orca"
- SERVICES="sshd chronyd"
- LIGHTDM_SESSION=''
- case $variant in
- base)
- SERVICES="$SERVICES dhcpcd wpa_supplicant acpid"
- ;;
- enlightenment)
- PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk-greeter enlightenment terminology udisks2"
- SERVICES="$SERVICES acpid dhcpcd wpa_supplicant lightdm dbus polkitd"
- LIGHTDM_SESSION=enlightenment
- ;;
- xfce*)
- PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk-greeter xfce4 gnome-themes-standard gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 xfce4-pulseaudio-plugin"
- SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
- LIGHTDM_SESSION=xfce
- if [ "$variant" == "xfce-wayland" ]; then
- PKGS="$PKGS $WAYLAND_PKGS labwc"
- LIGHTDM_SESSION="xfce-wayland"
- fi
- ;;
- mate)
- PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk-greeter mate mate-extra gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2"
- SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
- LIGHTDM_SESSION=mate
- ;;
- cinnamon)
- PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk-greeter cinnamon gnome-keyring colord gnome-terminal gvfs-afc gvfs-mtp gvfs-smb udisks2"
- SERVICES="$SERVICES dbus lightdm NetworkManager polkitd"
- LIGHTDM_SESSION=cinnamon
- ;;
- gnome)
- PKGS="$PKGS $XORG_PKGS gnome"
- SERVICES="$SERVICES dbus gdm NetworkManager polkitd"
- ;;
- kde)
- PKGS="$PKGS $XORG_PKGS kde5 konsole dolphin NetworkManager"
- SERVICES="$SERVICES dbus NetworkManager sddm"
- ;;
- lxde)
- PKGS="$PKGS $XORG_PKGS lxde lightdm lightdm-gtk-greeter gvfs-afc gvfs-mtp gvfs-smb udisks2"
- SERVICES="$SERVICES acpid dbus dhcpcd wpa_supplicant lightdm polkitd"
- LIGHTDM_SESSION=LXDE
- ;;
- lxqt)
- PKGS="$PKGS $XORG_PKGS lxqt sddm gvfs-afc gvfs-mtp gvfs-smb udisks2"
- SERVICES="$SERVICES dbus dhcpcd wpa_supplicant sddm polkitd"
- ;;
- *)
- >&2 echo "Unknown variant $variant"
- exit 1
- ;;
- esac
- if [ -n "$LIGHTDM_SESSION" ]; then
- mkdir -p "$INCLUDEDIR"/etc/lightdm
- echo "$LIGHTDM_SESSION" > "$INCLUDEDIR"/etc/lightdm/.session
- # needed to show the keyboard layout menu on the login screen
- cat <<- EOF > "$INCLUDEDIR"/etc/lightdm/lightdm-gtk-greeter.conf
- [greeter]
- indicators = ~host;~spacer;~clock;~spacer;~layout;~session;~a11y;~power
- EOF
- fi
- if [ "$WANT_INSTALLER" = yes ]; then
- include_installer
- else
- mkdir -p "$INCLUDEDIR"/usr/bin
- printf "#!/bin/sh\necho 'void-installer is not supported on this live image'\n" > "$INCLUDEDIR"/usr/bin/void-installer
- chmod 755 "$INCLUDEDIR"/usr/bin/void-installer
- fi
- if [ "$variant" != base ]; then
- setup_pipewire
- fi
- ./mklive.sh -a "$TARGET_ARCH" -o "$IMG" -p "$PKGS" -S "$SERVICES" -I "$INCLUDEDIR" \
- ${KERNEL_PKG:+-v $KERNEL_PKG} ${REPO} "$@"
- cleanup
- }
- if [ ! -x mklive.sh ]; then
- echo mklive.sh not found >&2
- exit 1
- fi
- if [ -n "$TRIPLET" ]; then
- IFS=: read -r ARCH DATE VARIANT _ < <( echo "$TRIPLET" | sed -Ee 's/^(.+)-([0-9rc]+)-(.+)$/\1:\2:\3/' )
- build_variant "$VARIANT" "$@"
- else
- for image in $IMAGES; do
- build_variant "$image" "$@"
- done
- fi
|