build-x86-images.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/bin/sh
  2. set -eu
  3. . ./lib.sh
  4. PROGNAME=$(basename "$0")
  5. ARCH=$(uname -m)
  6. IMAGES="base enlightenment xfce mate cinnamon gnome kde lxde lxqt"
  7. TRIPLET=
  8. REPO=
  9. DATE=$(date -u +%Y%m%d)
  10. help() {
  11. echo "$PROGNAME: [-a arch] [-b base|enlightenment|xfce|mate|cinnamon|gnome|kde|lxde|lxqt] [-d date] [-t arch-date-variant] [-r repo]" >&2
  12. }
  13. while getopts "a:b:d:t:hr:V" opt; do
  14. case $opt in
  15. a) ARCH="$OPTARG";;
  16. b) IMAGES="$OPTARG";;
  17. d) DATE="$OPTARG";;
  18. h) help; exit 0;;
  19. r) REPO="-r $OPTARG $REPO";;
  20. t) TRIPLET="$OPTARG";;
  21. V) version; exit 0;;
  22. *) help; exit 1;;
  23. esac
  24. done
  25. shift $((OPTIND - 1))
  26. INCLUDEDIR=$(mktemp -d)
  27. trap "cleanup" INT TERM
  28. cleanup() {
  29. rm -r "$INCLUDEDIR"
  30. }
  31. setup_pipewire() {
  32. PKGS="$PKGS pipewire alsa-pipewire"
  33. mkdir -p "$INCLUDEDIR"/etc/xdg/autostart
  34. ln -s /usr/share/applications/pipewire.desktop "$INCLUDEDIR"/etc/xdg/autostart/
  35. mkdir -p "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d
  36. ln -s /usr/share/examples/wireplumber/10-wireplumber.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  37. ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf "$INCLUDEDIR"/etc/pipewire/pipewire.conf.d/
  38. mkdir -p "$INCLUDEDIR"/etc/alsa/conf.d
  39. ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf "$INCLUDEDIR"/etc/alsa/conf.d
  40. ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf "$INCLUDEDIR"/etc/alsa/conf.d
  41. }
  42. build_variant() {
  43. variant="$1"
  44. shift
  45. IMG=void-live-${ARCH}-${DATE}-${variant}.iso
  46. GRUB_PKGS="grub-i386-efi grub-x86_64-efi"
  47. A11Y_PKGS="espeakup void-live-audio brltty"
  48. PKGS="dialog cryptsetup lvm2 mdadm void-docs-browse xtools-minimal xmirror $A11Y_PKGS $GRUB_PKGS"
  49. XORG_PKGS="xorg-minimal xorg-input-drivers xorg-video-drivers setxkbmap xauth font-misc-misc terminus-font dejavu-fonts-ttf orca"
  50. SERVICES="sshd"
  51. LIGHTDM_SESSION=''
  52. case $variant in
  53. base)
  54. SERVICES="$SERVICES dhcpcd wpa_supplicant acpid"
  55. ;;
  56. enlightenment)
  57. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter enlightenment terminology udisks2 firefox"
  58. SERVICES="$SERVICES acpid dhcpcd wpa_supplicant lightdm dbus polkitd"
  59. LIGHTDM_SESSION=enlightenment
  60. ;;
  61. xfce)
  62. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter xfce4 gnome-themes-standard gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox xfce4-pulseaudio-plugin"
  63. SERVICES="$SERVICES dbus elogind lightdm NetworkManager polkitd"
  64. LIGHTDM_SESSION=xfce
  65. ;;
  66. mate)
  67. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter mate mate-extra gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  68. SERVICES="$SERVICES dbus elogind lightdm NetworkManager polkitd"
  69. LIGHTDM_SESSION=mate
  70. ;;
  71. cinnamon)
  72. PKGS="$PKGS $XORG_PKGS lightdm lightdm-gtk3-greeter cinnamon gnome-keyring colord gnome-terminal gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  73. SERVICES="$SERVICES dbus elogind lightdm NetworkManager polkitd"
  74. LIGHTDM_SESSION=cinnamon
  75. ;;
  76. gnome)
  77. PKGS="$PKGS $XORG_PKGS gnome firefox"
  78. SERVICES="$SERVICES dbus elogind gdm NetworkManager polkitd"
  79. ;;
  80. kde)
  81. PKGS="$PKGS $XORG_PKGS kde5 konsole firefox dolphin"
  82. SERVICES="$SERVICES dbus elogind NetworkManager sddm"
  83. ;;
  84. lxde)
  85. PKGS="$PKGS $XORG_PKGS lxde lightdm lightdm-gtk3-greeter gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  86. SERVICES="$SERVICES acpid dbus dhcpcd wpa_supplicant lightdm polkitd"
  87. LIGHTDM_SESSION=LXDE
  88. ;;
  89. lxqt)
  90. PKGS="$PKGS $XORG_PKGS lxqt sddm gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox"
  91. SERVICES="$SERVICES elogind dbus dhcpcd wpa_supplicant sddm polkitd"
  92. ;;
  93. *)
  94. >&2 echo "Unknown variant $variant"
  95. exit 1
  96. ;;
  97. esac
  98. if [ -n "$LIGHTDM_SESSION" ]; then
  99. mkdir -p "$INCLUDEDIR"/etc/lightdm
  100. echo "$LIGHTDM_SESSION" > "$INCLUDEDIR"/etc/lightdm/.session
  101. fi
  102. if [ "$variant" != base ]; then
  103. setup_pipewire
  104. fi
  105. ./mklive.sh -a "$ARCH" -o "$IMG" -p "$PKGS" -S "$SERVICES" -I "$INCLUDEDIR" ${REPO} "$@"
  106. }
  107. if [ ! -x mklive.sh ]; then
  108. echo mklive.sh not found >&2
  109. exit 1
  110. fi
  111. if [ -x installer.sh ]; then
  112. MKLIVE_VERSION="$(PROGNAME='' version)"
  113. installer=$(mktemp)
  114. sed "s/@@MKLIVE_VERSION@@/${MKLIVE_VERSION}/" installer.sh > "$installer"
  115. install -Dm755 "$installer" "$INCLUDEDIR"/usr/bin/void-installer
  116. rm "$installer"
  117. else
  118. echo installer.sh not found >&2
  119. exit 1
  120. fi
  121. if [ -n "$TRIPLET" ]; then
  122. VARIANT="${TRIPLET##*-}"
  123. REST="${TRIPLET%-*}"
  124. DATE="${REST##*-}"
  125. ARCH="${REST%-*}"
  126. build_variant "$VARIANT" "$@"
  127. else
  128. for image in $IMAGES; do
  129. build_variant "$image" "$@"
  130. done
  131. fi