diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | COPYING | 2 | ||||
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | build-arm-images.sh.in | 21 | ||||
-rw-r--r-- | build-rootfs.sh.in | 21 | ||||
-rw-r--r-- | build-x86-images.sh.in | 83 | ||||
-rw-r--r-- | data/void-vpkgs.conf | 13 | ||||
-rw-r--r-- | dracut/59-mtd.rules | 8 | ||||
-rw-r--r-- | dracut/61-mtd.rules | 20 | ||||
-rw-r--r-- | dracut/adduser.sh | 8 | ||||
-rw-r--r-- | dracut/display-manager-autologin.sh | 18 | ||||
-rw-r--r-- | dracut/module-setup.sh | 10 | ||||
-rwxr-xr-x | dracut/mtd.sh | 7 | ||||
-rw-r--r-- | dracut/services.sh | 29 | ||||
-rw-r--r-- | grub/grub_void.cfg.in | 4 | ||||
-rw-r--r-- | installer.sh.in | 86 | ||||
-rw-r--r-- | isolinux/isolinux.cfg.in | 4 | ||||
-rw-r--r-- | keys/3d:b9:c0:50:41:a7:68:4c:2e:2c:a9:a2:5a:04:b7:3f.plist | 12 | ||||
-rw-r--r-- | mkimage.sh.in | 95 | ||||
-rw-r--r-- | mklive.sh.in | 235 | ||||
-rw-r--r-- | mkrootfs.sh.in | 90 |
21 files changed, 543 insertions, 228 deletions
diff --git a/.gitignore b/.gitignore index c97f963..20af4c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ *.sh +*.img +*.xz +xbps-cachedir* diff --git a/COPYING b/COPYING index 03cf7ef..b87022b 100644 --- a/COPYING +++ b/COPYING @@ -1,4 +1,4 @@ -# Copyright (c) 2009-2013 Juan Romero Pardines +# Copyright (c) 2009-2015 Juan RP <xtraeme@gmail.com> # Copyright (c) 2012 Dave Elusive <davehome@redthumb.info.tm> # All rights reserved. # diff --git a/README.md b/README.md index b22e00a..9837e96 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Welcome to the hrmpf rescue system, built on Void Linux. #### Dependencies - * xbps>=0.35 + * xbps>=0.45 * GNU bash #### Usage diff --git a/build-arm-images.sh.in b/build-arm-images.sh.in new file mode 100644 index 0000000..0cf4fa1 --- /dev/null +++ b/build-arm-images.sh.in @@ -0,0 +1,21 @@ +#!/bin/sh + +TARGET="$1" +[ -n "$TARGET" ] && shift + +: ${PLATFORMS:="beaglebone cubieboard2 odroid-u2 rpi rpi2 usbarmory"} +DATE=$(date '+%Y%m%d') + +for f in ${PLATFORMS} x ${PLATFORMS} ; do + if [ "$f" = "x" ]; then + musl=1 + continue + fi + target=$f + if [ -n "$musl" ]; then + target=${f}-musl + fi + if [ -z "$ARGET" -o "$TARGET" = "$target" ]; then + ./mkrootfs.sh $@ $target && ./mkimage.sh void-${target}-rootfs-${DATE}.tar.xz && xz -T0 -9 void-${target}-${DATE}.img + fi +done diff --git a/build-rootfs.sh.in b/build-rootfs.sh.in new file mode 100644 index 0000000..526ae96 --- /dev/null +++ b/build-rootfs.sh.in @@ -0,0 +1,21 @@ +#!/bin/sh + +TARGET="$1" +[ -n "$TARGET" ] && shift + +: ${PLATFORMS:="beaglebone cubieboard2 odroid-u2 rpi rpi2 usbarmory"} +DATE=$(date '+%Y%m%d') + +for f in ${PLATFORMS} x ${PLATFORMS} ; do + if [ "$f" = "x" ]; then + musl=1 + continue + fi + target=$f + if [ -n "$musl" ]; then + target=${f}-musl + fi + if [ -z "$ARGET" -o "$TARGET" = "$target" ]; then + ./mkrootfs.sh $@ $target + fi +done diff --git a/build-x86-images.sh.in b/build-x86-images.sh.in new file mode 100644 index 0000000..0fbf593 --- /dev/null +++ b/build-x86-images.sh.in @@ -0,0 +1,83 @@ +#!/bin/sh + +ARCH= +IMAGE= + +while getopts "a:b:h" opt; do +case $opt in + a) ARCH="$OPTARG";; + b) IMAGE="$OPTARG";; + h) echo "${0#/*}: [-a arch] [-b base|e|xfce|mate|cinnamon|kde|lxde]" >&2; exit 1;; +esac +done +shift $((OPTIND - 1)) + +: ${ARCH:=$(uname -m)} + +readonly DATE=$(date +%Y%m%d) +readonly BASE_IMG=void-live-${ARCH}-${DATE}.iso +readonly E_IMG=void-live-${ARCH}-${DATE}-enlightenment.iso +readonly XFCE_IMG=void-live-${ARCH}-${DATE}-xfce.iso +readonly MATE_IMG=void-live-${ARCH}-${DATE}-mate.iso +readonly CINNAMON_IMG=void-live-${ARCH}-${DATE}-cinnamon.iso +readonly KDE_IMG=void-live-${ARCH}-${DATE}-kde.iso +readonly LXDE_IMG=void-live-${ARCH}-${DATE}-lxde.iso +readonly LXQT_IMG=void-live-${ARCH}-${DATE}-lxqt.iso + +case "$ARCH" in + i686*) GRUB="grub";; + x86_64*) GRUB="grub-x86_64-efi";; +esac + +readonly BASE_PKGS="dialog cryptsetup lvm2 mdadm $GRUB" +readonly X_PKGS="$BASE_PKGS xorg-minimal xorg-input-drivers xorg-video-drivers setxkbmap xauth font-misc-misc terminus-font alsa-plugins-pulseaudio" +readonly E_PKGS="$X_PKGS lxdm enlightenment terminology econnman udisks2 firefox" +readonly XFCE_PKGS="$X_PKGS lxdm xfce4 gnome-themes-standard gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox" +readonly MATE_PKGS="$X_PKGS lxdm mate mate-extra gnome-keyring network-manager-applet gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox" +readonly CINNAMON_PKGS="$X_PKGS lxdm cinnamon gnome-keyring colord gnome-terminal gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox" +readonly KDE_PKGS="$X_PKGS kde" +readonly LXDE_PKGS="$X_PKGS lxdm lxde gvfs-afc gvfs-mtp gvfs-smb udisks2 firefox" +readonly LXQT_PKGS="$X_PKGS lxdm lxqt gvfs-afc gvfs-mtp gvfs-smb udisks2 qupzilla" + +[ ! -x mklive.sh ] && exit 0 + +if [ -z "$IMAGE" -o "$IMAGE" = base ]; then + if [ ! -e $BASE_IMG ]; then + ./mklive.sh -a $ARCH -o $BASE_IMG -p "$BASE_PKGS" $@ + fi +fi +if [ -z "$IMAGE" -o "$IMAGE" = e ]; then + if [ ! -e $E_IMG ]; then + ./mklive.sh -a $ARCH -o $E_IMG -p "$E_PKGS" $@ + fi +fi +if [ -z "$IMAGE" -o "$IMAGE" = xfce ]; then + if [ ! -e $XFCE_IMG ]; then + ./mklive.sh -a $ARCH -o $XFCE_IMG -p "$XFCE_PKGS" $@ + fi +fi +if [ -z "$IMAGE" -o "$IMAGE" = mate ]; then + if [ ! -e $MATE_IMG ]; then + ./mklive.sh -a $ARCH -o $MATE_IMG -p "$MATE_PKGS" $@ + fi +fi +if [ -z "$IMAGE" -o "$IMAGE" = cinnamon ]; then + if [ ! -e $CINNAMON_IMG ]; then + ./mklive.sh -a $ARCH -o $CINNAMON_IMG -p "$CINNAMON_PKGS" $@ + fi +fi +if [ -z "$IMAGE" -o "$IMAGE" = lxde ]; then + if [ ! -e $LXDE_IMG ]; then + ./mklive.sh -a $ARCH -o $LXDE_IMG -p "$LXDE_PKGS" $@ + fi +fi +if [ "$IMAGE" = lxqt ]; then + if [ ! -e $LXQT_IMG ]; then + ./mklive.sh -a $ARCH -o $LXQT_IMG -p "$LXQT_PKGS" $@ + fi +fi +if [ "$IMAGE" = kde ]; then + if [ ! -e $KDE_IMG ]; then + ./mklive.sh -a $ARCH -o $KDE_IMG -p "$KDE_PKGS" $@ + fi +fi diff --git a/data/void-vpkgs.conf b/data/void-vpkgs.conf index c1e8a89..e3cf52a 100644 --- a/data/void-vpkgs.conf +++ b/data/void-vpkgs.conf @@ -1,7 +1,10 @@ # Default void configuration # -# - gawk as default awk -# - openbsd-man as default man(1) -# -virtualpkg=awk-0_1:gawk -virtualpkg=man-0_1:openbsd-man +virtualpkg=awk:gawk +virtualpkg=cron-daemon:dcron +virtualpkg=editor:nvi +virtualpkg=man:openbsd-man +virtualpkg=ntp-daemon:openntpd +virtualpkg=openssl:libressl-openssl +virtualpkg=shell:dash +virtualpkg=smtp-server:opensmtpd diff --git a/dracut/59-mtd.rules b/dracut/59-mtd.rules new file mode 100644 index 0000000..d81a6ad --- /dev/null +++ b/dracut/59-mtd.rules @@ -0,0 +1,8 @@ +SUBSYSTEM!="block", GOTO="ps_end" +ACTION!="add|change", GOTO="ps_end" +# Also don't process disks that are slated to be a multipath device +ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="ps_end" + +KERNEL=="mtdblock[0-9]*", IMPORT BLKID + +LABEL="ps_end" diff --git a/dracut/61-mtd.rules b/dracut/61-mtd.rules new file mode 100644 index 0000000..0711d3a --- /dev/null +++ b/dracut/61-mtd.rules @@ -0,0 +1,20 @@ +SUBSYSTEM!="block", GOTO="pss_end" +ACTION!="add|change", GOTO="pss_end" +# Also don't process disks that are slated to be a multipath device +ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="pss_end" + +ACTION=="change", KERNEL=="dm-[0-9]*", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}!="1", GOTO="do_pss" +KERNEL=="mtdblock*", GOTO="do_pss" + +GOTO="pss_end" + +LABEL="do_pss" +# by-path (parent device path) +ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="", DEVPATH!="*/virtual/*", IMPORT PATH_ID +ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" +ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" + +# by-label/by-uuid links (filesystem metadata) +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" +LABEL="pss_end" diff --git a/dracut/adduser.sh b/dracut/adduser.sh index 0379690..f06a4ea 100644 --- a/dracut/adduser.sh +++ b/dracut/adduser.sh @@ -6,8 +6,10 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh echo hrmpf > ${NEWROOT}/etc/hostname +AUTOLOGIN=$(getarg live.autologin) USERNAME=$(getarg live.user) USERSHELL=$(getarg live.shell) + [ -z "$USERNAME" ] && USERNAME=anon [ -x $NEWROOT/bin/bash -a -z "$USERSHELL" ] && USERSHELL=/bin/bash [ -z "$USERSHELL" ] && USERSHELL=/bin/sh @@ -21,7 +23,7 @@ if ! grep -q ${USERSHELL} ${NEWROOT}/etc/shells ; then fi # Create new user and remove password. We'll use autologin by default. -chroot ${NEWROOT} useradd -m -c $USERNAME -G wheel -s $USERSHELL $USERNAME +chroot ${NEWROOT} useradd -m -c $USERNAME -G audio,video,wheel -s $USERSHELL $USERNAME chroot ${NEWROOT} passwd -d $USERNAME >/dev/null 2>&1 # Setup default root/user password (voidlinux). @@ -49,4 +51,8 @@ _EOF chroot ${NEWROOT} chown polkitd:polkitd /etc/polkit-1/rules.d/void-live.rules fi +if [ -n "$AUTOLOGIN" ]; then + sed -i "s,GETTY_ARGS=\"--noclear\",GETTY_ARGS=\"--noclear -a $USERNAME\",g" ${NEWROOT}/etc/sv/agetty-tty1/run +fi + chroot ${NEWROOT} usermod -s /bin/bash root diff --git a/dracut/display-manager-autologin.sh b/dracut/display-manager-autologin.sh index c667e21..4d41164 100644 --- a/dracut/display-manager-autologin.sh +++ b/dracut/display-manager-autologin.sh @@ -21,6 +21,12 @@ if [ -d ${NEWROOT}/etc/gdm ]; then fi fi +# Configure KDM autologin +if [ -e ${NEWROOT}/etc/kdm/kdmrc ]; then + sed -i -e "s|^\#\(AutoLoginEnable=\).*|\1|" ${NEWROOT}/etc/kdm/kdmrc + sed -i -e "s|^\#\(AutoLoginUser=\).*|\1$USERNAME|" ${NEWROOT}/etc/kdm/kdmrc +fi + # Configure lightdm autologin. if [ -r ${NEWROOT}/etc/lightdm.conf ]; then sed -i -e "s|^\#\(default-user=\).*|\1$USERNAME|" \ @@ -34,5 +40,17 @@ if [ -r ${NEWROOT}/etc/lxdm/lxdm.conf ]; then sed -e "s,.*autologin.*=.*,autologin=$USERNAME," -i ${NEWROOT}/etc/lxdm/lxdm.conf if [ -x ${NEWROOT}/usr/bin/enlightenment_start ]; then sed -e "s,.*session.*=.*,session=/usr/bin/enlightenment_start," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/startxfce4 ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/startxfce4," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/mate-session ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/mate-session," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/cinnamon-session ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/cinnamon-session," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/i3 ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/i3," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/startlxde ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/startlxde," -i ${NEWROOT}/etc/lxdm/lxdm.conf + elif [ -x ${NEWROOT}/usr/bin/startlxqt ]; then + sed -e "s,.*session.*=.*,session=/usr/bin/startlxqt," -i ${NEWROOT}/etc/lxdm/lxdm.conf fi fi diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh index fb4a067..4170620 100644 --- a/dracut/module-setup.sh +++ b/dracut/module-setup.sh @@ -14,9 +14,19 @@ install() { inst /usr/bin/chroot inst /usr/bin/chmod inst /usr/bin/sed + + if [ -e /usr/bin/memdiskfind ]; then + inst /usr/bin/memdiskfind + instmods mtdblock phram + inst_rules "$moddir/59-mtd.rules" "$moddir/61-mtd.rules" + prepare_udev_rules 59-mtd.rules 61-mtd.rules + inst_hook pre-udev 01 "$moddir/mtd.sh" + fi + inst_hook pre-pivot 01 "$moddir/adduser.sh" inst_hook pre-pivot 02 "$moddir/display-manager-autologin.sh" inst_hook pre-pivot 02 "$moddir/getty-autologin.sh" inst_hook pre-pivot 03 "$moddir/copy-initramfs.sh" inst_hook pre-pivot 04 "$moddir/locale.sh" + inst_hook pre-pivot 05 "$moddir/services.sh" } diff --git a/dracut/mtd.sh b/dracut/mtd.sh new file mode 100755 index 0000000..1d94a4e --- /dev/null +++ b/dracut/mtd.sh @@ -0,0 +1,7 @@ +#!/bin/sh +MEMDISK=$(memdiskfind) +if [ "$MEMDISK" ]; then + modprobe phram phram=memdisk,$MEMDISK + modprobe mtdblock + printf 'KERNEL=="mtdblock0", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/dmsquash-live-root /dev/mtdblock0"\n' >> /etc/udev/rules.d/99-live-squash.rules +fi diff --git a/dracut/services.sh b/dracut/services.sh new file mode 100644 index 0000000..50461ff --- /dev/null +++ b/dracut/services.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh + +SERVICEDIR=$NEWROOT/etc/sv +SERVICES="$(getarg live.services)" + +for f in ${SERVICES}; do + ln -sf /etc/sv/$f $NEWROOT/etc/runit/runsvdir/default/ +done + +dhcpcd=1 +for f in connmand NetworkManager wicd; do + if [ -e $SERVICEDIR/$f ]; then + unset dhcpcd + fi +done + +# Enable all services by default... with some exceptions. +for f in $SERVICEDIR/*; do + _service=${f##*/} + case "${_service}" in + agetty-console|agetty-generic|agetty-serial|agetty-tty[SAU]*|sulogin|dhcpcd-*|iptables|ip6tables|wpa_supplicant|pulseaudio|lvmetad|dmeventd|mdadm) ;; # ignored + dhcpcd) [ -n "$dhcpcd" ] && ln -sf ${f##$NEWROOT} $NEWROOT/etc/runit/runsvdir/default/;; + *) ln -sf ${f##$NEWROOT} $NEWROOT/etc/runit/runsvdir/default/;; + esac +done diff --git a/grub/grub_void.cfg.in b/grub/grub_void.cfg.in index a6bf89f..a2cda85 100644 --- a/grub/grub_void.cfg.in +++ b/grub/grub_void.cfg.in @@ -34,13 +34,13 @@ if [ cpuid -l ]; then locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ initrd (${voidlive})/boot/initrd } - menuentry "@@BOOT_TITLE@@ @@KERNVER@@ (@@ARCH@@) (load to RAM)" { + menuentry "@@BOOT_TITLE@@ @@KERNVER@@ (@@ARCH@@) (RAM)" { set gfxpayload="keep" linux (${voidlive})/boot/vmlinuz \ root=live:CDLABEL=VOID_LIVE ro init=/sbin/init \ rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap \ vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ \ - locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram=1 + locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram initrd (${voidlive})/boot/initrd } fi diff --git a/installer.sh.in b/installer.sh.in index 6f5a00a..84dbcb0 100644 --- a/installer.sh.in +++ b/installer.sh.in @@ -39,7 +39,7 @@ FILESYSTEMS_DONE= SYSTEMD_INIT= TARGETDIR=/mnt/target -LOG=/dev/tty7 +LOG=/dev/tty8 CONF_FILE=/tmp/.void-installer.conf if [ ! -f $CONF_FILE ]; then touch -f $CONF_FILE @@ -134,7 +134,7 @@ show_disks() { fi done # SATA/SCSI and Virtual disks (virtio) - for dev in $(ls /sys/block|grep -E '^([sv]|xv)d'); do + for dev in $(ls /sys/block|grep -E '^([sv]|xv)d|mmcblk'); do echo "/dev/$dev" size=$(cat /sys/block/$dev/size) sectorsize=$(cat /sys/block/$dev/queue/hw_sector_size) @@ -163,24 +163,26 @@ show_partitions() { echo "size:${fssize:-unknown};fstype:${fstype:-none}" fi done - # Software raid (md) - for p in $(ls -d /dev/md* 2>/dev/null|grep '[0-9]'); do - if cat /proc/mdstat|grep -qw $(echo $p|sed -e 's|/dev/||g'); then - fstype=$(lsblk -nfr /dev/$part|awk '{print $2}') - fssize=$(lsblk -nr /dev/$p|awk '{print $4}') - echo "$p" - echo "size:${fssize:-unknown};fstype:${fstype:-none}" - fi - done - if [ ! -e /sbin/lvs ]; then - continue + done + # Software raid (md) + for p in $(ls -d /dev/md* 2>/dev/null|grep '[0-9]'); do + part=$(basename $p) + if cat /proc/mdstat|grep -qw $part; then + fstype=$(lsblk -nfr /dev/$part|awk '{print $2}') + [ "$fstype" = "crypto_LUKS" ] && continue + [ "$fstype" = "LVM2_member" ] && continue + fssize=$(lsblk -nr /dev/$part|awk '{print $4}') + echo "$p" + echo "size:${fssize:-unknown};fstype:${fstype:-none}" fi + done + if [ -e /sbin/lvs ]; then # LVM lvs --noheadings|while read lvname vgname perms size; do echo "/dev/mapper/${vgname}-${lvname}" echo "size:${size};fstype:lvm" done - done + fi } menu_filesystems() { @@ -252,13 +254,13 @@ ${BOLD}NOTE: you don't need this on EFI systems.${RESET}\n\n For EFI systems GPT is mandatory and a FAT32 partition with at least\n 100MB must be created with the TOGGLE \`boot', this will be used as\n EFI System Partition. This partition must have mountpoint as \`/boot/efi'.\n\n -At least 2 partitions are required: swap and rootfs (/).\n +At least 1 partitions is required for the rootfs (/).\n For swap, RAM*2 must be really enough. For / 600MB are required.\n\n ${BOLD}WARNING: /usr is not supported as a separate partition.${RESET}\n ${RESET}\n" 18 80 if [ $? -eq 0 ]; then while true; do - clear; cfdisk $device; PARTITIONS_DONE=1; partx -a $device; partx -u $device + clear; cfdisk $device; PARTITIONS_DONE=1 break done else @@ -297,7 +299,7 @@ set_keymap() { if [ -f /etc/vconsole.conf ]; then sed -i -e "s|KEYMAP=.*|KEYMAP=$KEYMAP|g" $TARGETDIR/etc/vconsole.conf else - sed -i -e "s|KEYMAP=.*|KEYMAP=$KEYMAP|g" $TARGETDIR/etc/rc.conf + sed -i -e "s|#\?KEYMAP=.*|KEYMAP=$KEYMAP|g" $TARGETDIR/etc/rc.conf fi } @@ -321,13 +323,14 @@ menu_locale() { } set_locale() { - local LOCALE=$(get_option LOCALE) - - sed -i -e "s|LANG=.*|LANG=$LOCALE|g" $TARGETDIR/etc/locale.conf - # Uncomment locale from /etc/default/libc-locales and regenerate it. - sed -e "/${LOCALE}/s/^\#//" -i $TARGETDIR/etc/default/libc-locales - echo "Running xbps-reconfigure -f glibc-locales ..." >$LOG - chroot $TARGETDIR xbps-reconfigure -f glibc-locales >$LOG 2>&1 + if [ -f $TARGETDIR/etc/default/libc-locales ]; then + local LOCALE=$(get_option LOCALE) + sed -i -e "s|LANG=.*|LANG=$LOCALE|g" $TARGETDIR/etc/locale.conf + # Uncomment locale from /etc/default/libc-locales and regenerate it. + sed -e "/${LOCALE}/s/^\#//" -i $TARGETDIR/etc/default/libc-locales + echo "Running xbps-reconfigure -f glibc-locales ..." >$LOG + chroot $TARGETDIR xbps-reconfigure -f glibc-locales >$LOG 2>&1 + fi } menu_timezone() { @@ -419,7 +422,7 @@ set_rootpassword() { menu_bootloader() { while true; do DIALOG --title " Select the disk to install the bootloader" \ - --menu "$MENULABEL" ${MENUSIZE} $(show_disks) + --menu "$MENULABEL" ${MENUSIZE} $(show_disks) none "Manage bootloader otherwise" if [ $? -eq 0 ]; then set_option BOOTLOADER "$(cat $ANSWER)" BOOTLOADER_DONE=1 @@ -433,6 +436,8 @@ menu_bootloader() { set_bootloader() { local dev=$(get_option BOOTLOADER) grub_args= + if [ "$dev" = "none" ]; then return; fi + # Check if it's an EFI system via efivars module. if [ -n "$EFI_SYSTEM" ]; then grub_args="--target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=void_grub --recheck" @@ -470,7 +475,7 @@ configure_wifi() { DIALOG --form "Wireless configuration for ${dev}\n(encryption type: wep or wpa)" 0 0 0 \ "SSID:" 1 1 "" 1 16 30 0 \ "Encryption:" 2 1 "" 2 16 3 0 \ - "Password:" 3 1 "" 3 16 30 0 || return 1 + "Password:" 3 1 "" 3 16 50 0 || return 1 set -- $(cat $ANSWER) ssid="$1"; enc="$2"; pass="$3"; @@ -598,7 +603,7 @@ menu_network() { } validate_filesystems() { - local mnts dev size fstype mntpt mkfs rootfound swapfound fmt + local mnts dev size fstype mntpt mkfs rootfound fmt local usrfound efi_system_partition unset TARGETFS @@ -767,7 +772,7 @@ umount_filesystems() { } copy_rootfs() { - DIALOG --title "Check /dev/tty7 for details" \ + DIALOG --title "Check $LOG for details" \ --infobox "Copying live image to target rootfs, please wait ..." 4 60 LANG=C cp -axvnu / $TARGETDIR >$LOG 2>&1 if [ $? -ne 0 ]; then @@ -786,16 +791,22 @@ install_packages() { _syspkg="base-system" - mkdir -p $TARGETDIR/var/db/xbps/keys $TARGETDIR/usr/share/xbps - cp -a /usr/share/xbps/repo.d $TARGETDIR/usr/share/xbps/ + mkdir -p $TARGETDIR/var/db/xbps/keys $TARGETDIR/usr/share + cp -a /usr/share/xbps.d $TARGETDIR/usr/share/ cp /var/db/xbps/keys/*.plist $TARGETDIR/var/db/xbps/keys mkdir -p $TARGETDIR/boot/grub - stdbuf -oL xbps-install -r $TARGETDIR -Sy ${_syspkg} ${_grub} 2>&1 | \ + + _arch=$(xbps-uhelper arch) + + stdbuf -oL env XBPS_ARCH=${_arch} \ + xbps-install -r $TARGETDIR -SyU ${_syspkg} ${_grub} 2>&1 | \ DIALOG --title "Installing base system packages..." \ --programbox 24 80 if [ $? -ne 0 ]; then DIE 1 fi + xbps-reconfigure -r $TARGETDIR -f base-files >/dev/null 2>&1 + chroot $TARGETDIR xbps-reconfigure -a } enable_dhcpd() { @@ -843,20 +854,21 @@ ${BOLD}Do you want to continue?${RESET}" 20 80 || return . /etc/default/live.conf rm -f $TARGETDIR/etc/motd rm -f $TARGETDIR/etc/issue + rm -f $TARGETDIR/usr/sbin/void-installer # Remove live user. echo "Removing $USERNAME live user from targetdir ..." >$LOG chroot $TARGETDIR userdel -r $USERNAME >$LOG 2>&1 - DIALOG --title "Check /dev/tty7 for details" \ + DIALOG --title "Check $LOG for details" \ --infobox "Rebuilding initramfs for target ..." 4 60 echo "Rebuilding initramfs for target ..." >$LOG - chroot $TARGETDIR dracut --force >>$LOG 2>&1 - DIALOG --title "Check /dev/tty7 for details" \ + # mount required fs + mount_filesystems + chroot $TARGETDIR dracut --no-hostonly --add-drivers "ahci" --force >>$LOG 2>&1 + DIALOG --title "Check $LOG for details" \ --infobox "Removing temporary packages from target ..." 4 60 echo "Removing temporary packages from target ..." >$LOG xbps-remove -r $TARGETDIR -Ry dialog >>$LOG 2>&1 rmdir $TARGETDIR/mnt/target - # mount required fs - mount_filesystems else # mount required fs mount_filesystems @@ -901,7 +913,7 @@ ${BOLD}Do you want to continue?${RESET}" 20 80 || return else enable_dhcpd fi - elif [ -n "$dev" -a -n "$type" = "static" ]; then + elif [ -n "$_dev" -a "$_type" = "static" ]; then # static IP through dhcpcd. mv $TARGETDIR/etc/dhcpcd.conf $TARGETDIR/etc/dhdpcd.conf.orig echo "# Static IP configuration set by the void-installer for $_dev." \ diff --git a/isolinux/isolinux.cfg.in b/isolinux/isolinux.cfg.in index 33ea352..5af8bf6 100644 --- a/isolinux/isolinux.cfg.in +++ b/isolinux/isolinux.cfg.in @@ -25,9 +25,9 @@ MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ KERNEL /boot/vmlinuz APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ LABEL linuxram -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (load to RAM) +MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (RAM) KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram=1 +APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram LABEL memtest86+ MENU LABEL memtest86+ KERNEL /boot/memtest86+ diff --git a/keys/3d:b9:c0:50:41:a7:68:4c:2e:2c:a9:a2:5a:04:b7:3f.plist b/keys/3d:b9:c0:50:41:a7:68:4c:2e:2c:a9:a2:5a:04:b7:3f.plist new file mode 100644 index 0000000..41bc2cb --- /dev/null +++ b/keys/3d:b9:c0:50:41:a7:68:4c:2e:2c:a9:a2:5a:04:b7:3f.plist @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>public-key</key> + <data>LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFvM1Nrc2p5N01PMmc4UWxsZjdCVQp1aXhFUWlqN3FOSVJrU0hrWWw4SGxxd1hOczFnK1FzbzhGV3dSbDNMbUpTVW5wT1BaOG1sdVdSajd4Y2pLbnVJCnhPRjBtQS8vM0lzTnVId2dYV2RLL0JiT29wNzFLZmt4aEE0WjhwK0hRbmhLMThxUkFPbG9xOGJ6WXZhaGI2NmEKemdWVTVFM1JzRDU4V0M2ZTFOUVdSSGpiMG1TM2h6M1NxVWVWZFVMT20zVzZBRTdYdWlVQVJOSEdyY1ljMXkyKwpxNjBKWHMrVk5sRlMwaGdDdnpqS3phMVg5cWtzQndzTmdaRlhBcXN1MGFKRndYSTEvM2R4ZWxBcUZFbnRMWVFSCjA4NHpaTDFmWDVRMWlacGNEaHVhTWZVREVZQjA4UzdKTTBYKytibkxxVnphVTZzc0RXdGtzbFJaNjNaVStISTUKemk5a0pyc25LcU5Pa3BKSnJTUkRyMGFvRjV2RDRwN20vYWdZKzdTRk5aaDZzOUJ5V0x3NDVFdytwalVVUmp5aQp6T01TSFhEM3YzczhFdzZkV29wbTVQTGUvUEgzZWFiMEVnbG9yVDZhYmRwaCtaVG4zaUxMWVVkSGNmQ1FDN01GCkNmVGl1TWt4SkJpaCtoOEhKaUlBdmpDZjVxdjZiaFpEUHpGRzAwbEpYRUZwNHRpbGp6eTFmbitiMkdLY3BDOWQKUUs4TEc3M0RFaXhacHBmU09IU09MMWYxVlBzZTBRdnl6d2RWc0xzR0dqV0FaZkw4WUdVZDl4Y20yeW5tVzFuNgpKTjl6NE9oZ3lRa21mNUFFUXpYSUxQR0d1MlREUVh5c05IRG0vUnRMMHJPN3cxbFVKSTVYOW1kbEZYd0xUWHI3ClYrU25aK3U5VCtFREg1NTV6WDJDZTgwQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=</data> + <key>public-key-size</key> + <integer>4096</integer> + <key>signature-by</key> + <string>Void Linux</string> +</dict> +</plist> diff --git a/mkimage.sh.in b/mkimage.sh.in index 493f359..13e9301 100644 --- a/mkimage.sh.in +++ b/mkimage.sh.in @@ -1,6 +1,6 @@ #!/bin/sh #- -# Copyright (c) 2013 Juan Romero Pardines. +# Copyright (c) 2013-2015 Juan Romero Pardines. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -41,7 +41,7 @@ cleanup() { } info_msg() { - printf "\033[1m$@\n\033[m" + printf "\033[1m[${PLATFORM}] $@\n\033[m" } die() { @@ -102,13 +102,7 @@ if [ "$(id -u)" -ne 0 ]; then die "need root perms to continue, exiting." fi -IMGSIZE="$2" -if [ -z "$IMGSIZE" ]; then - IMGSIZE="2G" -else - IMGSIZE="${2}G" -fi - +: ${IMGSIZE:=2G} : ${BOOT_FSTYPE:=vfat} : ${BOOT_FSSIZE:=64M} : ${ROOT_FSTYPE:=ext4} @@ -119,7 +113,7 @@ fi # double check PLATFORM is supported... case "$PLATFORM" in - cubieboard2|odroid-u2|rpi);; + bananapi|beaglebone|cubieboard2|cubietruck|odroid-u2|rpi|rpi2|usbarmory|*-musl);; *) die "The $PLATFORM is not supported, exiting..." esac @@ -139,54 +133,81 @@ esac info_msg "Creating disk image ($IMGSIZE) ..." dd if=/dev/zero of=$FILENAME bs=$IMGSIZE count=1 ${DD_SPARSE} >/dev/null 2>&1 +ROOTFSDIR=$(mktemp -d) + info_msg "Creating disk image partitions/filesystems ..." parted $FILENAME mktable msdos if [ "$BOOT_FSTYPE" = "vfat" ]; then _btype="fat32" - _args="-I" + _args="-I -F16" fi -parted $FILENAME mkpart primary ${_btype} 4096s ${BOOT_FSSIZE} -parted $FILENAME mkpart primary ext2 ${BOOT_FSSIZE} 100% -parted $FILENAME toggle 1 boot -LOOPDEV=$(losetup --show --find $FILENAME) -partx -a $LOOPDEV -mkfs.${BOOT_FSTYPE} $_args ${LOOPDEV}p1 >/dev/null -mkfs.${ROOT_FSTYPE} ${LOOPDEV}p2 >/dev/null 2>&1 +case "$PLATFORM" in +cubieboard2|cubietruck) + parted $FILENAME mkpart primary ext2 2048s ${ROOT_FSSIZE} 100% + parted $FILENAME toggle 1 boot + LOOPDEV=$(losetup --show --find --partscan $FILENAME) + mkfs.${ROOT_FSTYPE} $disable_journal ${LOOPDEV}p1 >/dev/null 2>&1 + mount ${LOOPDEV}p1 $ROOTFSDIR + ROOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p1) + ;; +*) + parted $FILENAME mkpart primary ${_btype} 2048s ${BOOT_FSSIZE} + parted $FILENAME mkpart primary ext2 ${BOOT_FSSIZE} 100% + parted $FILENAME toggle 1 boot + LOOPDEV=$(losetup --show --find --partscan $FILENAME) + mkfs.${BOOT_FSTYPE} $_args ${LOOPDEV}p1 >/dev/null + case "$ROOT_FSTYPE" in + ext[34]) disable_journal="-O ^has_journal";; + esac + mkfs.${ROOT_FSTYPE} $disable_journal ${LOOPDEV}p2 >/dev/null 2>&1 + mount ${LOOPDEV}p2 $ROOTFSDIR + mkdir -p ${ROOTFSDIR}/boot + mount ${LOOPDEV}p1 ${ROOTFSDIR}/boot + BOOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p1) + ROOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p2) + ;; +esac info_msg "Unpacking rootfs tarball ..." -ROOTFSDIR=$(mktemp -d) -mount ${LOOPDEV}p2 $ROOTFSDIR -mkdir -p ${ROOTFSDIR}/boot -mount ${LOOPDEV}p1 ${ROOTFSDIR}/boot - +if [ "$PLATFORM" = "beaglebone" ]; then + fstab_args=",noauto" + tar xfp $ROOTFS_TARBALL -C $ROOTFSDIR ./boot/MLO + tar xfp $ROOTFS_TARBALL -C $ROOTFSDIR ./boot/u-boot.img + touch $ROOTFSDIR/boot/uEnv.txt + umount $ROOTFSDIR/boot +fi tar xfp $ROOTFS_TARBALL -C $ROOTFSDIR -BOOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p1) -ROOT_UUID=$(blkid -o value -s UUID ${LOOPDEV}p2) -echo "UUID=$BOOT_UUID /boot $BOOT_FSTYPE defaults 0 0" >> ${ROOTFSDIR}/etc/fstab -echo "UUID=$ROOT_UUID / $ROOT_FSTYPE defaults 0 1" >> ${ROOTFSDIR}/etc/fstab - -if [ -s ${ROOTFSDIR}/boot/cmdline.txt ]; then - sed -e "s,rootfstype=ext4,rootfstype=${ROOT_FSTYPE}," -i ${ROOTFSDIR}/boot/cmdline.txt +fspassno="1" +if [ "$ROOT_FSTYPE" = "f2fs" ]; then + fspassno="0" +fi +echo "UUID=$ROOT_UUID / $ROOT_FSTYPE defaults 0 ${fspassno}" >> ${ROOTFSDIR}/etc/fstab +if [ -n "$BOOT_UUID" ]; then + echo "UUID=$BOOT_UUID /boot $BOOT_FSTYPE defaults${fstab_args} 0 2" >> ${ROOTFSDIR}/etc/fstab fi -# For cubieboard we need to flash u-boot to the image. -if [ "$PLATFORM" = "cubieboard2" ]; then +case "$PLATFORM" in +bananapi|cubieboard2|cubietruck) dd if=${ROOTFSDIR}/boot/u-boot-sunxi-with-spl.bin of=${LOOPDEV} bs=1024 seek=8 >/dev/null 2>&1 -elif [ "$PLATFORM" = "odroid-u2" ]; then + ;; +odroid-u2) dd if=${ROOTFSDIR}/boot/E4412_S.bl1.HardKernel.bin of=${LOOPDEV} seek=1 >/dev/null 2>&1 dd if=${ROOTFSDIR}/boot/bl2.signed.bin of=${LOOPDEV} seek=31 >/dev/null 2>&1 dd if=${ROOTFSDIR}/boot/u-boot.bin of=${LOOPDEV} seek=63 >/dev/null 2>&1 dd if=${ROOTFSDIR}/boot/E4412_S.tzsw.signed.bin of=${LOOPDEV} seek=2111 >/dev/null 2>&1 -fi + ;; +usbarmory) + dd if=${ROOTFSDIR}/boot/u-boot.imx of=${LOOPDEV} bs=512 seek=2 conv=fsync >/dev/null 2>&1 + ;; +esac -umount ${ROOTFSDIR}/boot +mountpoint -q ${ROOTFSDIR}/boot && umount ${ROOTFSDIR}/boot umount $ROOTFSDIR -partx -d $LOOPDEV losetup -d $LOOPDEV rmdir $ROOTFSDIR chmod 644 $FILENAME -info_msg "Successfully created $FILENAME ($PLATFORM) image." +info_msg "Successfully created $FILENAME image." # vim: set ts=4 sw=4 et: diff --git a/mklive.sh.in b/mklive.sh.in index d794dfc..86b7f9d 100644 --- a/mklive.sh.in +++ b/mklive.sh.in @@ -1,9 +1,9 @@ -#!/bin/bash +#!/bin/sh # # vim: set ts=4 sw=4 et: # #- -# Copyright (c) 2009-2014 Juan Romero Pardines. +# Copyright (c) 2009-2015 Juan Romero Pardines. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -26,27 +26,39 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #- -set -E -trap "echo; error_out $LINENO $?" INT TERM HUP ERR +trap "error_out $LINENO $?" INT TERM 0 -readonly REQUIRED_PKGS="base-files syslinux grub-x86_64-efi squashfs-tools xorriso memtest86+" +readonly REQUIRED_PKGS="base-files libgcc dash coreutils sed tar gawk syslinux grub-x86_64-efi squashfs-tools xorriso memtest86+" +readonly INITRAMFS_PKGS="binutils xz device-mapper" readonly PROGNAME=$(basename $0) info_msg() { printf "\033[1m$@\n\033[m" } - +die() { + info_msg "ERROR: $@" + error_out 1 +} +mount_pseudofs() { + for f in sys dev proc; do + mkdir -p $ROOTFS/$f + mount --bind /$f $ROOTFS/$f + done +} +umount_pseudofs() { + umount -f $ROOTFS/sys >/dev/null 2>&1 + umount -f $ROOTFS/dev >/dev/null 2>&1 + umount -f $ROOTFS/proc >/dev/null 2>&1 +} error_out() { - info_msg "There was an error in line $1 ... cleaning up $BUILDDIR, exiting." - - [ -d "$BUILDDIR" ] && rm -rf "$BUILDDIR" - - exit 1 + umount_pseudofs + [ -d "$BUILDDIR" -a -z "$KEEP_BUILDDIR" ] && rm -rf "$BUILDDIR" + exit ${1:=0} } usage() { cat <<_EOF -Usage: $(basename $0) [options] +Usage: $PROGNAME [options] Options: -a <xbps-arch> Set XBPS_ARCH (do not use it unless you know what it is) @@ -63,8 +75,9 @@ Options: -C "cmdline args" Add additional kernel command line arguments. -T "title" Modify the bootloader title. + -K Do not remove builddir. -The $(basename $0) script generates a live image of the Void Linux distribution. +The $PROGNAME script generates a live image of the Void Linux distribution. This ISO image can be written to a CD/DVD-ROM or any USB stick. _EOF exit 1 @@ -74,40 +87,44 @@ copy_void_keys() { mkdir -p "$1"/var/db/xbps/keys cp keys/*.plist "$1"/var/db/xbps/keys } + copy_void_conf() { - install -Dm644 data/void-vpkgs.conf "$1"/etc/xbps/virtualpkg.d/void.conf + install -Dm644 data/void-vpkgs.conf "$1"/usr/share/xbps.d/void-virtualpkgs.conf +} + +copy_dracut_files() { + mkdir -p $1/usr/lib/dracut/modules.d/01vmklive + cp dracut/* $1/usr/lib/dracut/modules.d/01vmklive/ } install_prereqs() { copy_void_conf $VOIDHOSTDIR - $XBPS_INSTALL_CMD -r $VOIDHOSTDIR $XBPS_REPOSITORY $XBPS_CACHEDIR -y ${REQUIRED_PKGS} >> $LOGFILE 2>&1 - if [ $? -ne 0 ]; then - info_msg "Failed to install required software, exiting..." - error_out - fi + $XBPS_INSTALL_CMD -r $VOIDHOSTDIR $XBPS_REPOSITORY \ + $XBPS_HOST_CACHEDIR -y ${REQUIRED_PKGS} + [ $? -ne 0 ] && die "Failed to install required software, exiting..." } install_packages() { - if [ -n "$BASE_ARCH" ]; then - export XBPS_ARCH="$BASE_ARCH" - fi copy_void_conf $ROOTFS - # Check that all pkgs are reachable. - ${XBPS_INSTALL_CMD} -r $ROOTFS $XBPS_REPOSITORY $XBPS_CACHEDIR -yn ${PACKAGE_LIST} >>$LOGFILE 2>&1 - if [ $? -ne 0 ]; then - info_msg "Missing required binary packages, exiting..." - error_out - fi - ${XBPS_INSTALL_CMD} -r $ROOTFS $XBPS_REPOSITORY $XBPS_CACHEDIR -y ${PACKAGE_LIST} >>$LOGFILE 2>&1 - ${XBPS_INSTALL_CMD} -r $ROOTFS $XBPS_REPOSITORY $XBPS_CACHEDIR -yu >>$LOGFILE 2>&1 - ${XBPS_REMOVE_CMD} -r $ROOTFS $XBPS_CACHEDIR -o >>$LOGFILE 2>&1 + XBPS_ARCH=$BASE_ARCH ${XBPS_INSTALL_CMD} -r $ROOTFS \ + $XBPS_REPOSITORY $XBPS_CACHEDIR -yn ${PACKAGE_LIST} ${INITRAMFS_PKGS} + [ $? -ne 0 ] && die "Missing required binary packages, exiting..." + + mount_pseudofs + + LANG=C XBPS_ARCH=$BASE_ARCH ${XBPS_INSTALL_CMD} -U -r $ROOTFS \ + $XBPS_REPOSITORY $XBPS_CACHEDIR -y ${PACKAGE_LIST} ${INITRAMFS_PKGS} + [ $? -ne 0 ] && die "Failed to install $PACKAGE_LIST" + + xbps-reconfigure -r $ROOTFS -f base-files >/dev/null 2>&1 + chroot $ROOTFS env -i xbps-reconfigure -f base-files # Enable choosen UTF-8 locale and generate it into the target rootfs. if [ -f $ROOTFS/etc/default/libc-locales ]; then sed -e "s/\#\(${LOCALE}.*\)/\1/g" -i $ROOTFS/etc/default/libc-locales - xbps-uchroot $ROOTFS xbps-reconfigure -f glibc-locales >>$LOGFILE 2>&1 fi + chroot $ROOTFS env -i xbps-reconfigure -a if [ -x installer.sh ]; then install -Dm755 installer.sh $ROOTFS/usr/sbin/void-installer @@ -116,33 +133,36 @@ install_packages() { fi # Cleanup and remove useless stuff. rm -rf $ROOTFS/var/cache/* $ROOTFS/run/* $ROOTFS/var/run/* - - unset XBPS_ARCH -} - -copy_dracut_files() { - mkdir -p $1/usr/lib/dracut/modules.d/01vmklive - cp dracut/*.sh $1/usr/lib/dracut/modules.d/01vmklive/ } generate_initramfs() { - # Install required pkgs in a temporary rootdir to create - # the initramfs and to copy required files. - copy_dracut_files $VOIDHOSTDIR - copy_void_conf $VOIDHOSTDIR - $XBPS_INSTALL_CMD -r $VOIDHOSTDIR $XBPS_REPOSITORY $XBPS_CACHEDIR -y base-system xz lz4 >>$LOGFILE 2>&1 + local _args + copy_dracut_files $ROOTFS if [ "$BASE_SYSTEM_PKG" = "base-system-systemd" ]; then _args="--add systemd" else _args="--omit systemd" fi - xbps-uchroot $VOIDHOSTDIR /usr/bin/dracut --${INITRAMFS_COMPRESSION} \ - --force-add "vmklive" ${_args} "/boot/initrd" $KERNELVERSION >>$LOGFILE 2>&1 + chroot $ROOTFS env -i /usr/bin/dracut -N --${INITRAMFS_COMPRESSION} \ + --add-drivers "ahci" --force-add "vmklive" ${_args} "/boot/initrd" $KERNELVERSION + [ $? -ne 0 ] && die "Failed to generate the initramfs" - mv $VOIDHOSTDIR/boot/initrd $BOOT_DIR - cp $VOIDHOSTDIR/boot/vmlinuz-$KERNELVERSION $BOOT_DIR/vmlinuz - cp $VOIDHOSTDIR/boot/memtest86+ $BOOT_DIR + mv $ROOTFS/boot/initrd $BOOT_DIR + cp $ROOTFS/boot/vmlinuz-$KERNELVERSION $BOOT_DIR/vmlinuz + cp $ROOTFS/boot/memtest86+ $BOOT_DIR +} + +cleanup_rootfs() { + for f in ${INITRAMFS_PKGS}; do + revdeps=$(xbps-query -r $ROOTFS -X $f) + if [ -n "$revdeps" ]; then + xbps-pkgdb -r $ROOTFS -m auto $f + else + xbps-remove -r $ROOTFS -Ry ${f} >/dev/null 2>&1 + fi + done + rm -r $ROOTFS/usr/lib/dracut/modules.d/01vmklive } generate_isolinux_boot() { @@ -158,7 +178,7 @@ generate_isolinux_boot() { sed -i -e "s|@@SPLASHIMAGE@@|$(basename ${SPLASH_IMAGE})|" \ -e "s|@@KERNVER@@|${KERNELVERSION}|" \ -e "s|@@KEYMAP@@|${KEYMAP}|" \ - -e "s|@@ARCH@@|$(uname -m)|" \ + -e "s|@@ARCH@@|$BASE_ARCH|" \ -e "s|@@LOCALE@@|${LOCALE}|" \ -e "s|@@BOOT_TITLE@@|${BOOT_TITLE}|" \ -e "s|@@BOOT_CMDLINE@@|${BOOT_CMDLINE}|" \ @@ -171,34 +191,44 @@ generate_grub_efi_boot() { sed -i -e "s|@@SPLASHIMAGE@@|$(basename ${SPLASH_IMAGE})|" \ -e "s|@@KERNVER@@|${KERNELVERSION}|" \ -e "s|@@KEYMAP@@|${KEYMAP}|" \ - -e "s|@@ARCH@@|$(uname -m)|" \ + -e "s|@@ARCH@@|$BASE_ARCH|" \ -e "s|@@BOOT_TITLE@@|${BOOT_TITLE}|" \ -e "s|@@BOOT_CMDLINE@@|${BOOT_CMDLINE}|" \ -e "s|@@LOCALE@@|${LOCALE}|" $GRUB_DIR/grub_void.cfg + mkdir -p $GRUB_DIR/fonts + cp -f $GRUB_DATADIR/unicode.pf2 $GRUB_DIR/fonts - modprobe -q loop + modprobe -q loop || : # Create EFI vfat image. - dd if=/dev/zero of=$GRUB_DIR/efiboot.img bs=1024 count=4096 >>$LOGFILE 2>&1 - mkfs.vfat -F12 -S 512 -n "grub_uefi" "$GRUB_DIR/efiboot.img" >>$LOGFILE 2>&1 + dd if=/dev/zero of=$GRUB_DIR/efiboot.img bs=1024 count=4096 >/dev/null 2>&1 + mkfs.vfat -F12 -S 512 -n "grub_uefi" "$GRUB_DIR/efiboot.img" >/dev/null 2>&1 GRUB_EFI_TMPDIR="$(mktemp --tmpdir=$HOME -d)" LOOP_DEVICE="$(losetup --show --find ${GRUB_DIR}/efiboot.img)" - mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >>$LOGFILE 2>&1 + mount -o rw,flush -t vfat "${LOOP_DEVICE}" "${GRUB_EFI_TMPDIR}" >/dev/null 2>&1 cp -a $IMAGEDIR/boot $VOIDHOSTDIR - xbps-uchroot $VOIDHOSTDIR grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi" \ + xbps-uchroot $VOIDHOSTDIR grub-mkstandalone -- \ + --directory="/usr/lib/grub/x86_64-efi" \ --format="x86_64-efi" \ --compression="xz" --output="/tmp/bootx64.efi" \ - "boot/grub/grub.cfg" >>$LOGFILE 2>&1 - mkdir -p ${GRUB_EFI_TMPDIR}/EFI/boot - cp -f $VOIDHOSTDIR/tmp/bootx64.efi ${GRUB_EFI_TMPDIR}/EFI/boot/ + "boot/grub/grub.cfg" + if [ $? -ne 0 ]; then + umount "$GRUB_EFI_TMPDIR" + losetup --detach "${LOOP_DEVICE}" + die "Failed to generate EFI loader" + fi + mkdir -p ${GRUB_EFI_TMPDIR}/EFI/BOOT + cp -f $VOIDHOSTDIR/tmp/bootx64.efi ${GRUB_EFI_TMPDIR}/EFI/BOOT/BOOTX64.EFI umount "$GRUB_EFI_TMPDIR" losetup --detach "${LOOP_DEVICE}" rm -rf $GRUB_EFI_TMPDIR } generate_squashfs() { + umount_pseudofs + # Find out required size for the rootfs and create an ext3fs image off it. ROOTFS_SIZE=$(du -sm "$ROOTFS"|awk '{print $1}') if [ -z "$ROOTFS_FREESIZE" ]; then @@ -206,23 +236,24 @@ generate_squashfs() { fi mkdir -p "$BUILDDIR/tmp/LiveOS" dd if=/dev/zero of="$BUILDDIR/tmp/LiveOS/ext3fs.img" \ - bs="$((ROOTFS_SIZE+ROOTFS_FREESIZE))M" count=1 >>$LOGFILE 2>&1 + bs="$((ROOTFS_SIZE+ROOTFS_FREESIZE))M" count=1 >/dev/null 2>&1 mkdir -p "$BUILDDIR/tmp-rootfs" - mkfs.ext3 -F -m1 "$BUILDDIR/tmp/LiveOS/ext3fs.img" >>$LOGFILE 2>&1 + mkfs.ext3 -F -m1 "$BUILDDIR/tmp/LiveOS/ext3fs.img" >/dev/null 2>&1 mount -o loop "$BUILDDIR/tmp/LiveOS/ext3fs.img" "$BUILDDIR/tmp-rootfs" cp -a $ROOTFS/* $BUILDDIR/tmp-rootfs/ umount -f "$BUILDDIR/tmp-rootfs" mkdir -p "$IMAGEDIR/LiveOS" - mksquashfs "$BUILDDIR/tmp" "$IMAGEDIR/LiveOS/squashfs.img" \ - -comp ${SQUASHFS_COMPRESSION} >>$LOGFILE 2>&1 + $VOIDHOSTDIR/usr/bin/mksquashfs "$BUILDDIR/tmp" "$IMAGEDIR/LiveOS/squashfs.img" \ + -comp ${SQUASHFS_COMPRESSION} || die "Failed to generate squashfs image" chmod 444 "$IMAGEDIR/LiveOS/squashfs.img" + # Remove rootfs and temporary dirs, we don't need them anymore. rm -rf "$ROOTFS" "$BUILDDIR/tmp-rootfs" "$BUILDDIR/tmp" } generate_iso_image() { - xorriso -as mkisofs \ + $VOIDHOSTDIR/usr/bin/xorriso -as mkisofs \ -iso-level 3 -rock -joliet \ -max-iso9660-filenames -omit-period \ -omit-version-number -relaxed-filenames -allow-lowercase \ @@ -232,18 +263,20 @@ generate_iso_image() { -no-emul-boot -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot -e boot/grub/efiboot.img -isohybrid-gpt-basdat -no-emul-boot \ -isohybrid-mbr $SYSLINUX_DATADIR/isohdpfx.bin \ - -output "$CURDIR/$OUTPUT_FILE" "$IMAGEDIR" >>$LOGFILE 2>&1 + -output "$CURDIR/$OUTPUT_FILE" "$IMAGEDIR" || die "Failed to generate ISO image" } +XBPS_REPOSITORY= # # main() # -while getopts "a:b:r:c:C:T:k:l:i:s:S:o:p:h" opt; do +while getopts "a:b:r:c:C:T:Kk:l:i:s:S:o:p:h" opt; do case $opt in a) BASE_ARCH="$OPTARG";; b) BASE_SYSTEM_PKG="$OPTARG";; - r) XBPS_REPOSITORY+="--repository=$OPTARG ";; + r) XBPS_REPOSITORY="$XBPS_REPOSITORY --repository=$OPTARG ";; c) XBPS_CACHEDIR="--cachedir=$OPTARG";; + K) readonly KEEP_BUILDDIR=1;; k) KEYMAP="$OPTARG";; l) LOCALE="$OPTARG";; i) INITRAMFS_COMPRESSION="$OPTARG";; @@ -256,10 +289,14 @@ while getopts "a:b:r:c:C:T:k:l:i:s:S:o:p:h" opt; do h) usage;; esac done -shift $(($OPTIND - 1)) +shift $((OPTIND - 1)) + +ARCH=$(uname -m) # Set defaults -: ${XBPS_CACHEDIR:=--cachedir=/var/cache/xbps} +: ${BASE_ARCH:=$(uname -m)} +: ${XBPS_CACHEDIR:=-c $(pwd -P)/xbps-cachedir-${BASE_ARCH}} +: ${XBPS_HOST_CACHEDIR:=-c $(pwd -P)/xbps-cachedir-${ARCH}} : ${KEYMAP:=us} : ${LOCALE:=en_US.UTF-8} : ${INITRAMFS_COMPRESSION:=xz} @@ -270,12 +307,9 @@ shift $(($OPTIND - 1)) # Required packages in the image for a working system. PACKAGE_LIST="$BASE_SYSTEM_PKG $PACKAGE_LIST" -LOGFILE="$(mktemp -t vmklive-XXXXXXXXXX.log)" - # Check for root permissions. if [ "$(id -u)" -ne 0 ]; then - echo "Must be run as root, exiting..." - exit 1 + die "Must be run as root, exiting..." fi readonly CURDIR="$PWD" @@ -295,8 +329,9 @@ ISOLINUX_DIR="$BOOT_DIR/isolinux" GRUB_DIR="$BOOT_DIR/grub" ISOLINUX_CFG="$ISOLINUX_DIR/isolinux.cfg" -: ${XBPS_REPOSITORY:=--repository=http://repo.voidlinux.eu/current} +: ${XBPS_REPOSITORY:=--repository=http://repo.voidlinux.eu/current --repository=http://muslrepo.voidlinux.eu/current} : ${SYSLINUX_DATADIR:=$VOIDHOSTDIR/usr/share/syslinux} +: ${GRUB_DATADIR:=$VOIDHOSTDIR/usr/share/grub} : ${SPLASH_IMAGE:=data/splash.png} : ${XBPS_INSTALL_CMD:=xbps-install} : ${XBPS_REMOVE_CMD:=xbps-remove} @@ -307,28 +342,21 @@ ISOLINUX_CFG="$ISOLINUX_DIR/isolinux.cfg" mkdir -p $ROOTFS $VOIDHOSTDIR $ISOLINUX_DIR $GRUB_DIR -info_msg "Redirecting stdout/stderr to $LOGFILE ..." -info_msg "[1/9] Synchronizing XBPS repository data..." -# Sync index for remote repos first. +info_msg "[1/8] Synchronizing XBPS repository data..." copy_void_keys $ROOTFS -$XBPS_INSTALL_CMD -r $ROOTFS ${XBPS_REPOSITORY} -S -cp -a $ROOTFS/* $VOIDHOSTDIR +copy_void_keys $VOIDHOSTDIR +XBPS_ARCH=$BASE_ARCH $XBPS_INSTALL_CMD -r $ROOTFS ${XBPS_REPOSITORY} -S +$XBPS_INSTALL_CMD -r $VOIDHOSTDIR $XBPS_REPOSITORY -S -_linux_series=$($XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITORY:=-R} -x linux) -KERNELVERSION=$($XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITORY:=-R} -p pkgver ${_linux_series}) -KERNELVERSION=$($XBPS_UHELPER_CMD getpkgversion $KERNELVERSION) +_linux_series=$(XBPS_ARCH=$BASE_ARCH $XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITORY:=-R} -x linux|head -1) +_kver=$(XBPS_ARCH=$BASE_ARCH $XBPS_QUERY_CMD -r $ROOTFS ${XBPS_REPOSITORY:=-R} -p pkgver ${_linux_series}) +KERNELVERSION=$($XBPS_UHELPER_CMD getpkgversion ${_kver}) -: ${OUTPUT_FILE="hrmpf-$(uname -m)-${KERNELVERSION}-$(date +%Y%m%d).iso"} +: ${OUTPUT_FILE="hrmpf-${BASE_ARCH}-${KERNELVERSION}-$(date +%Y%m%d).iso"} -# -# Install required packages to generate the image. -# info_msg "[2/9] Installing software to generate the image: ${REQUIRED_PKGS} ..." install_prereqs -# -# Install live system and specified packages. -# mkdir -p "$ROOTFS"/etc [ -s data/motd ] && cp data/motd $ROOTFS/etc [ -s data/issue ] && cp data/issue $ROOTFS/etc @@ -336,42 +364,23 @@ mkdir -p "$ROOTFS"/etc info_msg "[3/9] Installing void pkgs into the rootfs: ${PACKAGE_LIST} ..." install_packages -export PATH=$VOIDHOSTDIR/usr/bin:$VOIDHOSTDIR/usr/sbin:$PATH -export LD_LIBRARY_PATH=$VOIDHOSTDIR/usr/lib -# -# Generate the initramfs. -# info_msg "[4/9] Generating initramfs image ($INITRAMFS_COMPRESSION)..." generate_initramfs -# -# Generate the isolinux boot. -# info_msg "[5/9] Generating isolinux support for PC-BIOS systems..." generate_isolinux_boot -# -# Generate the GRUB EFI boot. -# info_msg "[6/9] Generating GRUB support for EFI systems..." generate_grub_efi_boot -# -# Generate the squashfs image from rootfs. -# -info_msg "[7/9] Generating squashfs image ($SQUASHFS_COMPRESSION) from rootfs..." +info_msg "[7/9] Cleaning up rootfs..." +cleanup_rootfs + +info_msg "[8/9] Generating squashfs image ($SQUASHFS_COMPRESSION) from rootfs..." generate_squashfs -# -# Generate the ISO image. -# -info_msg "[8/9] Generating ISO image..." +info_msg "[9/9] Generating ISO image..." generate_iso_image -info_msg "[9/9] Removing build directory..." -rm -rf "$BUILDDIR" - hsize=$(du -sh "$CURDIR/$OUTPUT_FILE"|awk '{print $1}') info_msg "Created $(readlink -f $CURDIR/$OUTPUT_FILE) ($hsize) successfully." - -exit 0 diff --git a/mkrootfs.sh.in b/mkrootfs.sh.in index acfb58f..bedcb0c 100644 --- a/mkrootfs.sh.in +++ b/mkrootfs.sh.in @@ -1,6 +1,6 @@ #!/bin/sh #- -# Copyright (c) 2013-2014 Juan Romero Pardines. +# Copyright (c) 2013-2015 Juan Romero Pardines. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -45,11 +45,13 @@ usage() { cat <<_EOF Usage: $PROGNAME [options] <platform> -Supported platforms: cubieboard2, odroid-u2, rpi +Supported platforms: i686, i686-musl, x86_64, x86_64-musl, + dockstar, bananapi, beaglebone, cubieboard2, cubietruck, + odroid-u2, rpi, rpi2 (armv7), usbarmory Options -b <syspkg> Set an alternative base-system package (defaults to base-system) - -c <dir> Set XBPS cache directory (defaults to /var/cache/xbps) + -c <dir> Set XBPS cache directory (defaults to \$PWD/xbps-cachedir-<arch>) -C <file> Full path to the XBPS configuration file -h Show this help -p <pkgs> Additional packages to install into the rootfs (separated by blanks) @@ -73,7 +75,7 @@ umount_pseudofs() { run_cmd_target() { info_msg "Running $@ for target $_ARCH ..." - eval XBPS_TARGET_ARCH=${_ARCH} "$@" + eval XBPS_TARGET_ARCH=${_TARGET_ARCH:=${_ARCH}} "$@" [ $? -ne 0 ] && die "Failed to run $@" } @@ -87,8 +89,9 @@ register_binfmt() { if [ "$ARCH" = "${_ARCH}" ]; then return 0 fi + mountpoint -q /proc/sys/fs/binfmt_misc || modprobe -q binfmt_misc; mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc case "${_ARCH}" in - armv?l) + armv*) echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register cp -f $(which qemu-arm-static) $rootfs/usr/bin || die "failed to copy qemu-arm-static to the rootfs" ;; @@ -98,9 +101,6 @@ register_binfmt() { esac } -: ${XBPS_REPOSITORY:=--repository=http://repo.voidlinux.eu/current} -: ${XBPS_CACHEDIR:=--cachedir=/var/cache/xbps} -: ${PKGBASE:=base-system} # # main() # @@ -111,23 +111,48 @@ while getopts "b:C:c:hp:r:V" opt; do c) XBPS_CACHEDIR="--cachedir=$OPTARG";; h) usage; exit 0;; p) EXTRA_PKGS="$OPTARG";; - r) XBPS_REPOSITORY="--repository=$OPTARG $XBPS_REPOSITORY";; + r) XBPS_REPOSITORY="$XBPS_REPOSITORY --repository=$OPTARG";; V) echo "$PROGNAME @@MKLIVE_VERSION@@"; exit 0;; esac done shift $(($OPTIND - 1)) PLATFORM="$1" +SUBPLATFORM=$PLATFORM + +case "$PLATFORM" in + i686-musl) _TARGET_ARCH="$PLATFORM"; _ARCH="i386";; + i686) _TARGET_ARCH="$PLATFORM"; _ARCH="i386";; + x86_64-musl) _TARGET_ARCH="$PLATFORM"; _ARCH="x86_64";; + x86_64) _TARGET_ARCH="$PLATFORM"; _ARCH="x86_64";; + dockstar) _TARGET_ARCH="armv5tel"; _ARCH="armv5tel";; + rpi-musl) _TARGET_ARCH="armv6l-musl"; _ARCH="armv6l";; + rpi) _TARGET_ARCH="armv6l"; _ARCH="armv6l";; + *-musl) _TARGET_ARCH="armv7l-musl"; _ARCH="armv7l";; + *) _TARGET_ARCH="armv7l"; _ARCH="armv7l";; +esac + +: ${XBPS_REPOSITORY:=--repository=http://repo.voidlinux.eu/current --repository=http://muslrepo.voidlinux.eu/current} +: ${XBPS_CACHEDIR:=--cachedir=$PWD/xbps-cachedir-${_TARGET_ARCH}} +: ${PKGBASE:=base-system} if [ -z "$PLATFORM" ]; then echo "$PROGNAME: platform was not set!" usage; exit 1 fi + case "$PLATFORM" in - cubieboard2) _ARCH="armv7l"; QEMU_BIN=qemu-arm-static;; - odroid-u2) _ARCH="armv7l"; QEMU_BIN=qemu-arm-static;; - rpi) _ARCH="armv6l"; QEMU_BIN=qemu-arm-static;; + bananapi*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + beaglebone*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + cubieboard2*|cubietruck*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + dockstar*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + odroid-u2*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + rpi2*) SUBPLATFORM=rpi; QEMU_BIN=qemu-arm-static;; + rpi*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + usbarmory*) SUBPLATFORM=${PLATFORM%-*}; QEMU_BIN=qemu-arm-static;; + i686*) QEMU_BIN=qemu-i386-static;; + x86_64*) QEMU_BIN=qemu-x86_64-static;; *) die "$PROGNAME: invalid platform!";; esac @@ -143,7 +168,9 @@ for f in chroot tar xbps-install xbps-reconfigure xbps-query; do die "$f binary is missing in your system, exiting." fi done - +if ! $QEMU_BIN -version >/dev/null 2>&1; then + die "$QEMU_BIN binary is missing in your system, exiting." +fi # # Check if package base-system is available. # @@ -156,7 +183,10 @@ run_cmd_target "xbps-query -R -r $rootfs $XBPS_CONFFILE $XBPS_CACHEDIR $XBPS_REP chmod 755 $rootfs -PKGS="${PKGBASE} ${PLATFORM}-base" +case "$PLATFORM" in + i686*|x86_64*) PKGS="${PKGBASE} grub" ;; + *) PKGS="${PKGBASE} ${SUBPLATFORM}-base" ;; +esac [ -n "$EXTRA_PKGS" ] && PKGS="${PKGS} ${EXTRA_PKGS}" mount_pseudofs @@ -166,8 +196,10 @@ mount_pseudofs run_cmd_target "xbps-install -S $XBPS_CONFFILE $XBPS_CACHEDIR $XBPS_REPOSITORY -r $rootfs -y ${PKGS}" # Enable en_US.UTF-8 locale and generate it into the target rootfs. -LOCALE=en_US.UTF-8 -sed -e "s/\#\(${LOCALE}.*\)/\1/g" -i $rootfs/etc/default/libc-locales +if [ -e $rootfs/etc/default/libc-locales ]; then + LOCALE=en_US.UTF-8 + sed -e "s/\#\(${LOCALE}.*\)/\1/g" -i $rootfs/etc/default/libc-locales +fi # # Reconfigure packages for target architecture: must be reconfigured @@ -175,19 +207,19 @@ sed -e "s/\#\(${LOCALE}.*\)/\1/g" -i $rootfs/etc/default/libc-locales # if [ -n "${_ARCH}" ]; then info_msg "Reconfiguring packages for ${_ARCH} ..." - register_binfmt - run_cmd "xbps-reconfigure -r $rootfs base-directories" - run_cmd "chroot $rootfs xbps-reconfigure shadow" - if [ "$PKGBASE" = "base-system-systemd" ]; then - run_cmd "chroot $rootfs xbps-reconfigure systemd" - fi + case "$PLATFORM" in + i686*|x86_64*) + run_cmd "XBPS_ARCH=$_ARCH xbps-reconfigure -r $rootfs base-files" + ;; + *) + register_binfmt + run_cmd "xbps-reconfigure -r $rootfs base-files" + run_cmd "chroot $rootfs env -i xbps-reconfigure -f base-files" + rmdir $rootfs/usr/lib32 + rm -f $rootfs/lib32 $rootfs/lib64 $rootfs/usr/lib64 + ;; + esac run_cmd "chroot $rootfs xbps-reconfigure -a" - rmdir $rootfs/usr/lib32 - rm -f $rootfs/lib32 $rootfs/lib64 $rootfs/usr/lib64 -else - if [ "$PKGBASE" = "base-system-systemd" ]; then - run_cmd "chroot $rootfs xbps-reconfigure systemd" - fi fi # @@ -211,8 +243,8 @@ if [ -n "${_ARCH}" ]; then fi tarball=void-${PLATFORM}-rootfs-$(date '+%Y%m%d').tar.xz +run_cmd "tar -cp --posix -C $rootfs . | xz -T0 -9 > $tarball " -run_cmd "tar cp -C $rootfs . | xz -9 > $tarball" rm -rf $rootfs info_msg "Successfully created $tarball ($PLATFORM)" |