aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/mkiso.d/include/etc/issue21
-rw-r--r--utils/mkiso.d/include/etc/skel/.profile9
-rw-r--r--utils/mkiso.d/init96
-rw-r--r--utils/mkiso.d/live_script.sh26
-rwxr-xr-xutils/mkiso.sh194
-rwxr-xr-xutils/mkrootfs.sh39
-rwxr-xr-xutils/qemu.sh23
7 files changed, 408 insertions, 0 deletions
diff --git a/utils/mkiso.d/include/etc/issue b/utils/mkiso.d/include/etc/issue
new file mode 100644
index 00000000..e8f879f5
--- /dev/null
+++ b/utils/mkiso.d/include/etc/issue
@@ -0,0 +1,21 @@
+Alice Linux \r (\l)
+
+Project page : https://codeberg.org/emmett1/alicelinux
+
+user login : live
+user password: live
+
+root login : root
+root password: root
+
+run 'sway' after login to start gui
+
+Some default sway keybindsym reminder:
+
+ Super + Enter : foot terminal
+ Super + d : menu launcher
+ Super + Shift + q : quit program
+ Super + Shift + e : exit sway
+
+run 'doas poweroff' to poweroff live system
+
diff --git a/utils/mkiso.d/include/etc/skel/.profile b/utils/mkiso.d/include/etc/skel/.profile
new file mode 100644
index 00000000..e425b03b
--- /dev/null
+++ b/utils/mkiso.d/include/etc/skel/.profile
@@ -0,0 +1,9 @@
+# ~/.profile
+
+export ENV=~/.ashrc
+
+if [ -z "$XDG_RUNTIME_DIR" ]; then
+ XDG_RUNTIME_DIR="/tmp/$(id -u)-runtime-dir"
+ mkdir -pm 0700 "$XDG_RUNTIME_DIR"
+ export XDG_RUNTIME_DIR
+fi
diff --git a/utils/mkiso.d/init b/utils/mkiso.d/init
new file mode 100644
index 00000000..05356e39
--- /dev/null
+++ b/utils/mkiso.d/init
@@ -0,0 +1,96 @@
+#!/bin/busybox sh
+
+NEWROOT=/.newroot
+INITRAMFS=/run/initramfs
+MEDIA=$INITRAMFS/media
+LOWER=$INITRAMFS/lower
+UPPER=$INITRAMFS/upper
+WORK=$INITRAMFS/work
+SFSIMAGE=$MEDIA/boot/rootfs.sfs
+
+/bin/busybox --install -s /bin
+
+clear
+
+mkdir -p /proc /sys /run /dev
+mount -t proc proc /proc
+mount -t sysfs sysfs /sys
+mount -t tmpfs run /run
+mount -t devtmpfs dev /dev
+
+mkdir -p $LOWER $MEDIA $UPPER $WORK $NEWROOT
+
+exec >/dev/console </dev/console 2>&1
+
+PRINTK="`cat /proc/sys/kernel/printk`"
+echo "0" > /proc/sys/kernel/printk
+
+# mdev
+mkdir -p /etc
+echo '$MODALIAS=.* 0:0 660 @modprobe "$MODALIAS"' > /etc/mdev.conf
+mdev -df & pid_mdev=$!
+
+# load kernel modules, twice
+find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1
+find /sys -name 'modalias' -type f -exec cat '{}' + | sort -u | xargs modprobe -b -a >/dev/null 2>&1
+
+# load kernel modules required for live iso
+for m in loop cdrom isofs overlay squashfs usb-storage loop fuse exfat; do
+ modprobe $m >/dev/null 2>&1
+done
+
+echo "Please wait..."
+
+# figure out media
+if [ -f /proc/sys/dev/cdrom/info ]; then
+ CDROM=$(grep name /proc/sys/dev/cdrom/info | awk -F : '{print $2}' | awk '{print $1}')
+fi
+
+while [ "$wait" != 10 ]; do
+ BLOCK=$(grep -E '[vsh]d' /proc/partitions | awk '{print $4}')
+ for i in $CDROM $BLOCK; do
+ mount -v -r /dev/$i $MEDIA >/dev/null 2>&1 || continue
+ [ -f $MEDIA/boot/livemedia ] || { umount $MEDIA; continue; }
+ MEDIAFOUND=1
+ break 2
+ done
+ wait=$(( wait + 1 ))
+ sleep 1
+done
+
+if [ ! "$MEDIAFOUND" ]; then
+ echo "Media not found even after 10 seconds"
+ sh
+ echo "Cannot go further"
+ sleep 99999
+ exit 1
+fi
+
+# mount stuffs
+loopdevice=$(losetup -f)
+losetup -f $SFSIMAGE
+mount -r $loopdevice $LOWER
+mount -t overlay overlay -o lowerdir=$LOWER,upperdir=$UPPER,workdir=$WORK $NEWROOT
+if [ -f $MEDIA/boot/rootfs.gz ]; then
+ tar -xzaf $MEDIA/boot/rootfs.gz -C $NEWROOT
+fi
+
+kill $pid_mdev
+
+mount --move /sys $NEWROOT/sys
+mount --move /proc $NEWROOT/proc
+mount --move /dev $NEWROOT/dev
+mount --move /run $NEWROOT/run
+
+# execute live script if exist
+if [ -f $NEWROOT/$MEDIA/boot/live_script.sh ]; then
+ chroot $NEWROOT sh $MEDIA/boot/live_script.sh
+fi
+
+# switch to newroot
+clear
+exec /bin/switch_root $NEWROOT /sbin/init
+
+echo "This is the end of initramfs"
+echo "Nothing further, here's the shell"
+/bin/busybox sh
diff --git a/utils/mkiso.d/live_script.sh b/utils/mkiso.d/live_script.sh
new file mode 100644
index 00000000..bb470dc1
--- /dev/null
+++ b/utils/mkiso.d/live_script.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+LIVEUSER=live
+PASSWORD=live
+LIVEHOSTNAME=alicelive
+
+adduser -D $LIVEUSER
+for g in users wheel audio video input; do
+ addgroup $LIVEUSER $g
+done
+
+passwd -d $LIVEUSER >/dev/null 2>&1
+passwd -d root >/dev/null 2>&1
+
+echo "root:root" | chpasswd -c SHA512
+echo "$LIVEUSER:$PASSWORD" | chpasswd -c SHA512
+
+for sv in tty1 tty2 tty3 seatd; do
+ [ -d /etc/sv/$sv ] && ln -s /etc/sv/$sv /var/service
+done
+
+echo $LIVEHOSTNAME > /etc/hostname
+
+if [ -f /etc/doas.conf ]; then
+ echo "permit nopass $LIVEUSER" >> /etc/doas.conf
+fi
diff --git a/utils/mkiso.sh b/utils/mkiso.sh
new file mode 100755
index 00000000..c6fc083d
--- /dev/null
+++ b/utils/mkiso.sh
@@ -0,0 +1,194 @@
+#!/bin/sh -e
+
+msg() { echo "-> $@"; }
+cleanup() { rm -rf $WORKDIR; }
+
+prepare_rootfs() {
+ [ -d $ROOTFS ] && return
+ basepkg="baselayout autils binutils bison busybox
+ bzip2 ca-certificates curl file flex gcc
+ git gmp initscripts linux-headers m4 make
+ mpc mpfr musl openssl patch spm xz zlib"
+ requiredpkg="linux grub syslinux efibootmgr"
+ extrapkg="pfetch sway swaybg swayidle swaylock wmenu mpv
+ foot firefox fff ranger dejavu-fonts-ttf wpa_supplicant dhcpcd
+ imv lm-sensors opendoas zstd rsync squashfs-tools"
+ mkdir -p $ROOTFS/var/lib/spm/db
+ APKG_NOPROMPT=1 APKG_ROOT=$ROOTFS apkg -I $basepkg $requiredpkg $extrapkg
+}
+
+squashfs_rootfs() {
+ [ -f $ISODIR/boot/rootfs.sfs ] && return
+ mkdir -p $ISODIR/boot
+
+ msg "squashing rootfs..."
+ mksquashfs \
+ $ROOTFS \
+ $ISODIR/boot/rootfs.sfs \
+ -b 1048576 \
+ -comp xz \
+ -wildcards \
+ -e tmp/* -e root/* -e sys/* -e dev/* -e proc/* -e run/*
+}
+
+add_kmod() {
+ [ -f $INITRAMFSDIR/$KERNEL_MODULES_DIR/$1 ] && continue
+ mkdir -p $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*}
+ cp $ROOTFS/$KERNEL_MODULES_DIR/$1 $INITRAMFSDIR/$KERNEL_MODULES_DIR/${1%/*}
+ for d in $(grep $1: $ROOTFS/$KERNEL_MODULES_DIR/modules.dep | tr ' ' '\n' | tail -n+2); do
+ add_kmod $d
+ done
+}
+
+make_initramfs() {
+ [ -f $ISODIR/boot/initrd ] && return
+ mkdir -p $INITRAMFSDIR/bin
+ cp $MKISOD/init $INITRAMFSDIR
+ chmod +x $INITRAMFSDIR/init
+ cp /bin/busybox $INITRAMFSDIR/bin
+
+ KERNEL_VER=$(file $ROOTFS/boot/vmlinuz-linux | awk '{print $9}')
+ KERNEL_MODULES_DIR=lib/modules/$KERNEL_VER
+
+ msg "copying kernel modules..."
+ ( cd $ROOTFS/$KERNEL_MODULES_DIR
+ for rk in $required_kmods; do
+ [ -d kernel/$rk ] || continue
+ for f in $(find kernel/$rk -type f); do
+ add_kmod $f
+ done
+ done
+ )
+
+ for i in order builtin builtin.modinfo; do
+ cp $ROOTFS/$KERNEL_MODULES_DIR/modules.$i $INITRAMFSDIR/lib/modules/$KERNEL_VER/
+ done
+ depmod -b $INITRAMFSDIR $KERNEL_VER
+
+ msg "generating live initrd..."
+ ( cd $INITRAMFSDIR ; find . | cpio -o -H newc | gzip -9 ) > $ISODIR/boot/initrd
+}
+
+prepare_grub() {
+ [ -f $ISODIR/boot/efiboot.img ] && return
+ msg "preparing grub boot files..."
+ mkdir -p $ISODIR/boot/grub/x86_64-efi $ISODIR/boot/grub/fonts
+ echo "set prefix=/boot/grub" > $ISODIR/boot/grub-early.cfg
+ cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.mod $ISODIR/boot/grub/x86_64-efi
+ cp -a $ROOTFS/usr/lib/grub/x86_64-efi/*.lst $ISODIR/boot/grub/x86_64-efi
+ cp $ROOTFS/usr/share/grub/unicode.pf2 $ISODIR/boot/grub/fonts/unicode.pf2
+
+ # UEFI
+ rm -f $ISODIR/boot/efiboot.img
+ mkdir -p $ISODIR/efi/boot
+ grub-mkimage -c $ISODIR/boot/grub-early.cfg -o $ISODIR/efi/boot/bootx64.efi -O x86_64-efi -p "" iso9660 normal search search_fs_file
+ modprobe loop
+ dd if=/dev/zero of=$ISODIR/boot/efiboot.img count=4096
+ mkdosfs -n LIVE-UEFI $ISODIR/boot/efiboot.img
+ mkdir -p $ISODIR/boot/efiboot
+ mount -o loop $ISODIR/boot/efiboot.img $ISODIR/boot/efiboot
+ mkdir -p $ISODIR/boot/efiboot/EFI/boot
+ cp $ISODIR/efi/boot/bootx64.efi $ISODIR/boot/efiboot/EFI/boot
+ umount $ISODIR/boot/efiboot
+ rm -fr $ISODIR/boot/efiboot
+}
+
+prepare_syslinux() {
+ [ -f $ISODIR/isolinux/isolinux.bin ] && return
+ msg "preparing syslinux boot files..."
+ mkdir -p $ISODIR/isolinux
+ cp $ROOTFS/usr/share/syslinux/ldlinux.c32 $ISODIR/isolinux
+ cp $ROOTFS/usr/share/syslinux/isolinux.bin $ISODIR/isolinux
+}
+
+make_iso() {
+ cp $ROOTFS/boot/vmlinuz-linux $ISODIR/boot/vmlinuz
+ [ -f $MKISOD/live_script.sh ] && cp $MKISOD/live_script.sh $ISODIR/boot
+ touch $ISODIR/boot/livemedia
+
+ if [ -d $MKISOD/include ]; then
+ echo "include rootfs files..."
+ (
+ cd $MKISOD/include
+ chown -R 0:0 *
+ tar -czf $ISODIR/boot/rootfs.gz *
+ )
+ fi
+
+ cat << EOF > $ISODIR/isolinux/isolinux.cfg
+#UI /isolinux/menu.c32
+DEFAULT silent
+TIMEOUT 0
+
+LABEL silent
+LINUX /boot/vmlinuz
+APPEND initrd=/boot/initrd
+EOF
+
+ cat << EOF > $ISODIR/boot/grub/grub.cfg
+set default=0
+set timeout=3
+set timeout_style=hidden
+
+menuentry 'Alice Linux' {
+ linux /boot/vmlinuz
+ initrd /boot/initrd
+}
+EOF
+
+ msg "generating iso..."
+ rm -f $OUTPUT
+ xorriso -as mkisofs \
+ -isohybrid-mbr $ROOTFS/usr/share/syslinux/isohdpfx.bin \
+ -c isolinux/boot.cat \
+ -b isolinux/isolinux.bin \
+ -no-emul-boot \
+ -boot-load-size 4 \
+ -boot-info-table \
+ -eltorito-alt-boot \
+ -e boot/efiboot.img \
+ -no-emul-boot \
+ -isohybrid-gpt-basdat \
+ -volid ALICE \
+ -o $OUTPUT $ISODIR
+
+ sha256sum $OUTPUT > $ISOSUM
+}
+
+WORKDIR=/tmp/alice-iso
+ROOTFS=$WORKDIR/rootfs
+ISODIR=$WORKDIR/liveiso
+INITRAMFSDIR=$WORKDIR/initramfs
+MKISOD=$PWD/mkiso.d
+OUTPUT=$PWD/alicelinux-$(date +%Y%m%d).iso
+ISOSUM=$OUTPUT.sha256sum
+
+required_kmods="crypto
+ fs lib
+ drivers/block
+ drivers/md
+ drivers/ata
+ drivers/firewire
+ drivers/input/keyboard
+ drivers/input/mouse
+ drivers/scsi
+ drivers/message
+ drivers/pcmcia
+ drivers/virtio
+ drivers/usb/host
+ drivers/usb/storage
+ drivers/hid
+ drivers/cdrom"
+
+cleanup
+prepare_rootfs
+squashfs_rootfs
+make_initramfs
+prepare_grub
+prepare_syslinux
+make_iso
+cleanup
+
+msg "making iso done"
+
+exit 0
diff --git a/utils/mkrootfs.sh b/utils/mkrootfs.sh
new file mode 100755
index 00000000..0b31bdcc
--- /dev/null
+++ b/utils/mkrootfs.sh
@@ -0,0 +1,39 @@
+#!/bin/sh -e
+
+[ "$(id -u)" = 0 ] || {
+ echo "making rootfs required root access"
+ false
+}
+
+HERE=$(pwd)
+OUTNAME=alicelinux-rootfs-$(date +%Y%m%d)
+TARBALL=$HERE/$OUTNAME.tar.xz
+PKGLIST=$TARBALL.pkglist
+SHASUM=$TARBALL.sha256sum
+ROOTFS=/tmp/alicerootfs
+basepkg="baselayout autils b3sum bison busybox bzip2
+ ca-certificates curl file git initscripts
+ libressl linux-headers llvm m4 make musl
+ patch spm xz zlib-ng zstd"
+
+rm -rf $ROOTFS
+mkdir -p $ROOTFS/var/lib/spm/db
+APKG_ROOT=$ROOTFS apkg -i $basepkg
+apkg-chroot $ROOTFS revdep -v
+
+rm -f $TARBALL
+
+echo "compressing rootfs..."
+(cd $ROOTFS; tar -cJpf $TARBALL *)
+
+for i in $ROOTFS/var/lib/spm/db/*; do
+ n=${i##*/}
+ v=$(head -n1 $i); v=${v%-*}
+ echo "$n $v" >> $PKGLIST
+done
+
+sha256sum ${TARBALL##*/} > $SHASUM
+
+rm -rf $ROOTFS
+
+echo "alice rootfs created."
diff --git a/utils/qemu.sh b/utils/qemu.sh
new file mode 100755
index 00000000..11b82a6d
--- /dev/null
+++ b/utils/qemu.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+PORTSDIR="$(dirname $(dirname $(realpath $0)))"
+SCRIPTDIR="$(dirname $(realpath $0))"
+
+[ -f /tmp/qemu-vm.img ] || {
+ qemu-img create -f qcow2 /tmp/qemu-vm.img 50G
+}
+
+qemu-system-x86_64 -enable-kvm \
+ -cpu host \
+ -drive file=/tmp/qemu-vm.img,if=virtio \
+ -device virtio-rng-pci \
+ -m 2G \
+ -smp 4 \
+ -monitor stdio \
+ -name "QEMU" \
+ -boot d \
+ -cdrom $@
+
+rm -f /tmp/qemu-vm.img
+
+exit 0