diff --git a/trisquel-automatic-netinstall-qemu/.gitignore b/trisquel-automatic-netinstall-qemu/.gitignore new file mode 100644 index 0000000..720569e --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/.gitignore @@ -0,0 +1,19 @@ +# Copyright (C) 2024 Denis 'GNUtoo' Carikli +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see . + +# Files produced by the build system. +/autom4te.cache/** +/gnupg/** +/grub/** +/grub.iso +/Makefile +/preseed.img +/rootfs.img +/rootfs.img.tmp diff --git a/trisquel-automatic-netinstall-qemu/D24DDAC9226D5BA5E9F3BED3F5DAAAF74AD4C938.asc b/trisquel-automatic-netinstall-qemu/D24DDAC9226D5BA5E9F3BED3F5DAAAF74AD4C938.asc new file mode 100644 index 0000000..97e9dbb --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/D24DDAC9226D5BA5E9F3BED3F5DAAAF74AD4C938.asc @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGNQMswBEACpaLnL36fWyve4zXHKrN7AjXl+g5cafQyei4j1saTLfQatdJed +ubvcscZ3yERB+R0+8xuH2UqvR0E57ohZZaTiwcUWJ3VemxCZhwKy+Xvt1ZUNxBrh +2qAJBcP0+UCskSfWb+QQ1twNIeQ8Raj+kRPGphlNmjYxF2CFOsw9c56Lz+jNyty9 +RC3Bg4l+Kcdhw23w5XBUXpHOyL6lsG317PWgEHUIQzNhXZfHL9GzwtTVQV8tVPyu +MOQIa7KDFXUEEnRN31mVLzfNHqKtTgFfP2LnSiD3LsBYsqJUtAnFGyORHgKhddRg +AKLrn1h0dEzkN+XsMaAWPrJg87ks7qXhhNz3SEI+t7dL4ozfUryRY9/8t/rXuQK+ +ffRO/63i8SaHdu1Sl8MgHsNZRFOlbYGPw73TpdJ3JvfmfPNrRcTzsU1arMML8GWs +q6/QYDTWVYBYXy0kEqJQmeb3yJRvnIdVfiAdu9fyDPY8FCTUTcsxKe88u2bgrIaY +pNdoNFXojIC9JvMUM5QakMeog+ocTrZFOyhRMKfq5KEV/IDvsx6BfQzpjvK27LgX +LcdlP9HUVb9ZkKUgMGV1trqSA7kKrkDtfw+BInReTeSEnr4jsAwwiG62kDmmA4mo +dFq1MsWTAJTvpeeK+86gYliZukt6076zPrszmDJIyJWwHCLFn1jVkn1tlQARAQAB +tFpUcmlzcXVlbCBHTlUvTGludXggQXJjaGl2ZSBBdXRvbWF0aWMgU2lnbmluZyBL +ZXkgKDExL2FyYW1vKSA8dHJpc3F1ZWwtZGV2ZWxAdHJpc3F1ZWwuaW5mbz6JAk4E +EwEKADgCGwMFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AWIQTSTdrJIm1bpenzvtP1 +2qr3StTJOAUCY1AzAgAKCRD12qr3StTJOIxbD/44B7Kv+26TBW6BIiUlp1iDsvoX +yHk9yau41g6HjJR53KrFID4uszN9B+Cl+R0PjywfgC9OSSTKOjJq4/yQE00JpuF+ +HtWieshZJs8QFKLD+mZQfRVCQweqj9HZS8AFH02LYkdsXiv4LZLaNljcHEPC3Y34 +61xcg3viATgHL1ZJIPGT/vk425jQkEv9wjCjIvKsMhoE9EcqDBft9jKBC6H8LQwZ +iIYYNf28WRIW/EbutPe+0B3YOuw3PT/o/x40ySLWIJARODxBCqJ0wEC4PI7lUiLg +DGV0cUUykZz7BXKaIZIj+3wViR5zDGqIWx5TwdW2MJpDi9ove8N/3HaAc6BwQQXH +acZohOBqf/BjTKXQufVzx1sMBxB+a5zp284uICX54y/mm9tPHWcOOtl+NYj5qk4A +qn+vh433kNW622qJ8tt72kbcfaRekBnCj/A10U46TyWgZgMc7XxCc5r8slJWlhYZ +bRgbWWvkyH1s0mzbkAyNwrNa0vafcxOxO9psc7LG4mLPBqLoKKPmYY5Vgu8fdlbb +OLLFVvNhuTSX2ugkPfAp/XeWucQPJv3een1C1AWNcufhKYm1DZkYTGBeT8cbsw3T +0JnpRad+Sm2VhLcQ8PHKHUUeklVqUMjyCHo32sydo+I1MjC3QWycolljno2un9HU +TNAXG/1k2DzsqFPFjw== +=LJyh +-----END PGP PUBLIC KEY BLOCK----- diff --git a/trisquel-automatic-netinstall-qemu/Makefile.am b/trisquel-automatic-netinstall-qemu/Makefile.am new file mode 100644 index 0000000..713b6de --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/Makefile.am @@ -0,0 +1,79 @@ +# Copyright (C) 2024 Denis 'GNUtoo' Carikli +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +dist_pkgdata_DATA = rootfs.img + +EXTRA_QEMU_ARGS = +if WANT_KVM +EXTRA_QEMU_ARGS += -enable-kvm +endif # WANT_KVM + +gnupg/pubring.kbx: ${srcdir}/D24DDAC9226D5BA5E9F3BED3F5DAAAF74AD4C938.asc + install -d gnupg + gpg \ + --home=gnupg \ + --import \ + ${srcdir}/D24DDAC9226D5BA5E9F3BED3F5DAAAF74AD4C938.asc || \ + rm -rf gnupg + +.PHONY: check-trisquel-installation-image +check-trisquel-installation-image: $(TRISQUEL_NETINSTALL) gnupg/pubring.kbx + gpg --home=gnupg \ + --verify trisquel-netinst_11.0_amd64.iso.asc \ + $(TRISQUEL_NETINSTALL) + +grub/boot/linux: Makefile check-trisquel-installation-image + install -D -d grub/boot + xorriso -osirrox on \ + -indev $(TRISQUEL_NETINSTALL) \ + -extract /linux $@ + chmod 770 $@ + +grub/boot/initrd.gz: Makefile check-trisquel-installation-image + install -D -d grub/boot + xorriso -osirrox on \ + -indev $(TRISQUEL_NETINSTALL) \ + -extract /initrd.gz $@ + chmod 770 $@ + +grub/boot/grub/grub.cfg: Makefile grub.cfg + install -D -m 660 grub.cfg $@ + +# It is way more simple to just extract the kernel and initramfs and +# write some grub.cfg by hand than to somehow modify an existing +# installer iso. +grub.iso: Makefile grub/boot/linux grub/boot/initrd.gz grub/boot/grub/grub.cfg + grub-mkrescue -o $@ grub + +preseed.img: Makefile preseed.cfg + dd if=/dev/zero of=$@.tmp count=2048 + mkfs.vfat --mbr=y -n MEDIA $@.tmp + mcopy -i $@.tmp preseed.cfg ::/preseed.cfg + mv $@.tmp $@ + +rootfs.img.tmp: Makefile + qemu-img create -f qcow2 $@ 10G + +rootfs.img: preseed.img rootfs.img.tmp grub.iso + install -m 644 rootfs.img.tmp rootfs.img || rm -f rootfs.img + + qemu-system-x86_64 \ + -M q35 \ + -m 2048M \ + -nographic \ + -drive file=grub.iso,index=2,media=cdrom,if=ide \ + -drive file=rootfs.img.tmp,index=1,media=disk,if=virtio \ + -drive file=preseed.img,index=0,media=disk,if=none,format=raw,id=usb \ + -usb -device usb-ehci,id=ehci -device usb-storage,bus=ehci.0,drive=usb \ + $(EXTRA_QEMU_ARGS) || \ + \ + rm -f rootfs.img diff --git a/trisquel-automatic-netinstall-qemu/README b/trisquel-automatic-netinstall-qemu/README new file mode 100644 index 0000000..31acb40 --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/README @@ -0,0 +1,25 @@ +Deployment and limitations. +=========================== + +Creating an image is similar to the build of other software as you use +similar commands: +$ ./autogen.sh +$ ./configure --prefix=/ \ + --with-trisquel-netinstall=~/Downloads/trisquel-netinst_11.0_amd64.iso +$ make + +License +======= + +This project is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This project is distributed in the hope that they will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this project. If not, see . \ No newline at end of file diff --git a/trisquel-automatic-netinstall-qemu/autogen.sh b/trisquel-automatic-netinstall-qemu/autogen.sh new file mode 100755 index 0000000..a340f99 --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/autogen.sh @@ -0,0 +1,11 @@ +#!/bin/sh +# Copyright (C) 2023 Denis 'GNUtoo' Carikli +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see . +autoreconf -fi $@ diff --git a/trisquel-automatic-netinstall-qemu/configure.ac b/trisquel-automatic-netinstall-qemu/configure.ac new file mode 100644 index 0000000..dc64b95 --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/configure.ac @@ -0,0 +1,120 @@ +# Copyright (C) 2023 Denis 'GNUtoo' Carikli +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +AC_PREREQ([2.69]) +AC_INIT([trisquel-automatic-netinstall-qemu], [0.1], + [GNUtoo@cyberdimension.org]) +AC_CONFIG_SRCDIR([configure.ac]) +AC_PROG_AWK +AC_PROG_MKDIR_P +AM_INIT_AUTOMAKE([foreign]) + +AC_SUBST([ENABLE_KVM], []) +AC_SUBST([TRISQUEL_NETINSTALL], []) + +AC_ARG_ENABLE(kvm, + [AS_HELP_STRING([--disable-kvm], + [Use Kvm to obtain a public IP address (default=enabled)])], + [kvm="$enableval"], + [kvm="yes"]) + +AM_CONDITIONAL( [WANT_KVM], [test x"$kvm" = x"yes"]) + +AC_ARG_WITH( + [trisquel-netinstall], + [AS_HELP_STRING( + [--with-trisquel-netinstall=PATH], + [Path to trisquel netinstall image + (default=trisquel-netinst_11.0_amd64.iso). Note that at the moment + only trisquel-netinst_11.0_amd64.iso is supported. If you use + another image the signature verification will fail.])], + [TRISQUEL_NETINSTALL=$withval], + [TRISQUEL_NETINSTALL=trisquel-netinst_11.0_amd64.iso]) + +AC_CHECK_PROG([CHMOD], [chmod], [chmod]) +AS_IF([test x"$CHMOD" = x""], + [AC_MSG_ERROR([chmod was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([GPG], [gpg], [gpg]) +AS_IF([test x"$GPG" = x""], + [AC_MSG_ERROR([gpg was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([INSTALL], [install], [install]) +AS_IF([test x"$INSTALL" = x""], + [AC_MSG_ERROR([install was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([RM], [rm], [rm]) +AS_IF([test x"$RM" = x""], + [AC_MSG_ERROR([rm was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([XORRISO], [xorriso], [xorriso]) +AS_IF([test x"$XORRISO" = x""], + [AC_MSG_ERROR([xorriso was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([GRUB_MKRESCUE], [grub-mkrescue], [grub-mkrescue]) +AS_IF([test x"$GRUB_MKRESCUE" = x""], + [AC_MSG_ERROR([grub-mkrescue was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([DD], [dd], [dd]) +AS_IF([test x"$DD" = x""], + [AC_MSG_ERROR([dd was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([MKFS_VFAT], [mkfs.vfat], [mkfs.vfat]) +AS_IF([test x"$MKFS_VFAT" = x""], + [AC_MSG_ERROR([mkfs.vfat was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([MCOPY], [mcopy], [mcopy]) +AS_IF([test x"$MCOPY" = x""], + [AC_MSG_ERROR([mcopy was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([MV], [mv], [mv]) +AS_IF([test x"$MV" = x""], + [AC_MSG_ERROR([mv was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([QEMU_IMG], [qemu-img], [qemu-img]) +AS_IF([test x"$QEMU_IMG" = x""], + [AC_MSG_ERROR([qemu-img was not found in PATH ($PATH)])]) + +AC_CHECK_PROG([QEMU_SYSTEM_X86_64], [qemu-system-x86_64], [qemu-system-x86_64]) +AS_IF([test x"$QEMU_SYSTEM_X86_64" = x""], + [AC_MSG_ERROR([qemu-system-x86_64 was not found in PATH ($PATH)])]) + +# Check for the netinstall iso file +AS_IF([test x"`echo "$TRISQUEL_NETINSTALL" | cut -c1`" = x"~"], + [AC_MSG_ERROR([~ not supported in --with-trisquel-netinstall. + Use paths without '~'.])]) + +AC_CHECK_FILE([$TRISQUEL_NETINSTALL], + [], + [AC_MSG_ERROR([trisquel-netinst_11.0_amd64.iso was not found in + $TRISQUEL_NETINSTALL])]) + +AS_IF([test x"$kvm" = x"yes"], + [AS_IF([test -c /dev/kvm], [], AC_MSG_ERROR([/dev/kvm not found.])) + AS_IF([echo quit | qemu-system-x86_64 -display none -vga none -enable-kvm -monitor stdio], + [], + [AC_MSG_ERROR([KVM test with qemu-system-x86_64 failed. + Check permissions on /dev/kvm.])])]) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT + +echo +echo "Configuration options:" +echo "======================" +AS_IF([test x"$kvm" = x"yes"], + [echo "- Kvm: enabled"], + [echo "- Kvm: disabled"]) +echo "- Trisquel netinstall path: $TRISQUEL_NETINSTALL" diff --git a/trisquel-automatic-netinstall-qemu/grub.cfg b/trisquel-automatic-netinstall-qemu/grub.cfg new file mode 100644 index 0000000..6df9e37 --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/grub.cfg @@ -0,0 +1,18 @@ +# Copyright (C) 2024 Denis 'GNUtoo' Carikli +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +set timeout=1 + +menuentry "Trisquel 11 netinstall with custom preseed" { + linux /boot/linux auto=true priority=critical preseed/file=/media/preseed.cfg --- console=ttyS0,115200 quiet + initrd /boot/initrd.gz +} diff --git a/trisquel-automatic-netinstall-qemu/preseed.cfg b/trisquel-automatic-netinstall-qemu/preseed.cfg new file mode 100644 index 0000000..45ab2bd --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/preseed.cfg @@ -0,0 +1,63 @@ +#_preseed_V1 + +# Copyright (C) 2024 Denis 'GNUtoo' Carikli +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or (at +# your option) any later version. +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# Accounts +d-i passwd/root-login boolean false +d-i passwd/username string admin666 +d-i passwd/user-fullname string admin666 +d-i passwd/user-password password password +d-i passwd/user-password-again password password + +# Keyboard layout +d-i keyboard-configuration/xkb-keymap select us + +# Locales +d-i debian-installer/locale string en_US + +# Network +d-i netcfg/choose_interface select auto +d-i netcfg/get_domain string test +d-i netcfg/get_hostname string test + +# Package management +d-i mirror/country string manual +d-i mirror/http/directory string /trisquel +d-i mirror/http/hostname string mirror.fsf.org +d-i mirror/http/proxy string +popularity-contest popularity-contest/participate boolean false + +# Partitioning +d-i grub-installer/bootdev string /dev/vda +d-i partman-auto-lvm/guided_size string max +d-i partman-auto/choose_recipe select atomic +d-i partman-auto/disk string /dev/vda +d-i partman-auto/method string regular +d-i partman-md/confirm boolean true +d-i partman-partitioning/confirm_write_new_label boolean true +d-i partman-partitioning/confirm_write_new_label boolean true +d-i partman/choose_partition select finish +d-i partman/choose_partition select finish +d-i partman/confirm boolean true +d-i partman/confirm boolean true +d-i partman/confirm_nooverwrite boolean true +d-i partman/confirm_nooverwrite boolean true + +# Timezone +d-i clock-setup/ntp boolean true +d-i clock-setup/utc boolean true +d-i time/zone string Europe/Paris + +# Shutdown at the end +d-i finish-install/reboot_in_progress note +d-i debian-installer/exit/poweroff boolean true diff --git a/trisquel-automatic-netinstall-qemu/trisquel-netinst_11.0_amd64.iso.asc b/trisquel-automatic-netinstall-qemu/trisquel-netinst_11.0_amd64.iso.asc new file mode 100644 index 0000000..d3e36cf --- /dev/null +++ b/trisquel-automatic-netinstall-qemu/trisquel-netinst_11.0_amd64.iso.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEE0k3aySJtW6Xp877T9dqq90rUyTgFAmQWV7cACgkQ9dqq90rU +yTg2Lw//Y6z8D0uKRl2ihiDqBWWaV1Q7urck/HcLYDYyfbemlLCm3lt3K9lU/CGS +Sa4viGLnfC9sXwBvDAAOHQI9zmlV5QmJtYzUv/oAT929qsIXFWRT4JerMdcpf/KK +i/DkQyu8VbgZbRMJihozTuArlCLmIBFjskTw0gQcl4okiaasrYFGCw0uLVFGInkD +2iiTgoi0EzuLEoJtITELUOuZRDbFwz/5Wn0lC0oDxVx9vH4keBz2RlyVtQmAhrKQ +Xt278M6E8N4vE8/euIYSTlRFfifLux9RLvq1sUXNc0fluU7D7ndqtWVO3fMCRu5M +q5Hd61K8HAlT3xO58VTsekvId1An0g/tGrRVle2Ny3jcPb4zpoGwD2bZbKvgSEZW +UMaDBLAvfUvzGEv8zU8j318ClBPcQUMzCISdbCaK/0GhszcxC4+RGPOum7vCHB4V +jbvkrjnGnfPam6p+KBDuYuYx9qYqMtJm3l0rsijThljBmBPTDqvpaAvfrk0sOxyD +PnqTSU35OVJCZWtQD4M855vxN0Y44BTVleklW6iS/56Jn29bVHofu/evZxFkNboe +USQELjuyRpAMQPUvkPlRYqrKMmgrV95GMEBWiPJz/7qOv7kMahSoHoOkAP6XtJjz +IW0eZ1wijG7pQRgpEZ3OQKNI9KFV0nzGNqbHI8ymtHvzQsTCSP8= +=/+sf +-----END PGP SIGNATURE-----