From eef1cc7f56fdaf2dd832329b9956a359f64397f9 Mon Sep 17 00:00:00 2001 From: 0xTux <0xtux@pm.me> Date: Fri, 28 Apr 2023 21:50:37 +0530 Subject: [PATCH] updated base --- LICENSE | 21 -- README.md | 3 - .../fonts/conf.d/10-powerline-symbols.conf | 105 ------- airootfs/etc/fstab | 0 airootfs/etc/group | 18 ++ airootfs/etc/gshadow | 18 ++ airootfs/etc/hostname | 2 +- airootfs/etc/locale.conf | 2 +- airootfs/etc/localtime | 1 + airootfs/etc/machine-id | 0 airootfs/etc/mkinitcpio.conf | 67 +++++ airootfs/etc/mkinitcpio.d/linux.preset | 8 + airootfs/etc/modprobe.d/broadcom-wl.conf | 7 + airootfs/etc/motd | 11 + .../etc/pacman.d/hooks/uncomment-mirrors.hook | 13 + ...z99-remove-custom-hooks-from-airootfs.hook | 18 ++ airootfs/etc/passwd | 2 + airootfs/etc/resolv.conf | 1 + airootfs/etc/shadow | 2 + airootfs/etc/skel/.bash_profile | 7 - airootfs/etc/skel/.bashrc | 49 --- airootfs/etc/skel/.vimrc | 3 - airootfs/etc/skel/.xinitrc | 15 - airootfs/etc/skel/.xsession | 9 - airootfs/etc/ssh/sshd_config | 116 ++++++++ .../etc/sudoers.d/{g_wheel => 02_g_wheel} | 0 .../journald.conf.d/volatile-storage.conf | 2 + .../etc/systemd/logind.conf.d/suspend.conf | 4 + .../etc/systemd/network/20-ethernet.network | 21 ++ airootfs/etc/systemd/network/20-wlan.network | 17 ++ airootfs/etc/systemd/network/20-wwan.network | 17 ++ .../systemd-gpt-auto-generator | 1 + .../bluetooth.target.wants/bluetooth.service | 1 + .../etc/systemd/system/choose-mirror.service | 10 + .../cloud-config.service | 1 + .../cloud-final.service | 1 + .../cloud-init-local.service | 1 + .../cloud-init.service | 1 + .../etc/systemd/system/dbus-org.bluez.service | 1 + ...dbus-org.freedesktop.ModemManager1.service | 1 + .../dbus-org.freedesktop.network1.service | 1 + .../dbus-org.freedesktop.resolve1.service | 1 + .../dbus-org.freedesktop.timesync1.service | 1 + airootfs/etc/systemd/system/default.target | 1 + .../systemd/system/display-manager.service | 1 + .../systemd/system/etc-pacman.d-gnupg.mount | 8 + .../ModemManager.service | 1 + .../NetworkManager.service | 1 + .../choose-mirror.service | 1 + .../hv_fcopy_daemon.service | 1 + .../hv_kvp_daemon.service | 1 + .../hv_vss_daemon.service | 1 + .../pacman-init.service | 1 + .../multi-user.target.wants/reflector.service | 1 + .../multi-user.target.wants/sshd.service | 1 + .../systemd-resolved.service | 1 + .../vboxservice.service | 1 + .../multi-user.target.wants/vmtoolsd.service | 1 + .../vmware-vmblock-fuse.service | 1 + .../wpa_supplicant.service | 1 + .../NetworkManager-wait-online.service | 1 + .../etc/systemd/system/pacman-init.service | 15 + .../system/reflector.service.d/archiso.conf | 6 + .../systemd-time-wait-sync.service | 1 + .../systemd-timesyncd.service | 1 + airootfs/etc/udev/rules.d/81-dhcpcd.rules | 1 - airootfs/etc/xdg/reflector/reflector.conf | 8 + airootfs/root/.automated_script.sh | 34 +++ airootfs/root/.zlogin | 6 + airootfs/root/customize_airootfs.sh | 38 --- airootfs/usr/local/bin/Installation_guide | 5 + airootfs/usr/local/bin/choose-mirror | 28 ++ airootfs/usr/local/bin/livecd-sound | 248 ++++++++++++++++ .../local/share/livecd-sound/asound.conf.in | 3 + bootstrap_packages.x86_64 | 2 + build.sh | 279 ------------------ .../entries/01-tuxOS-iso-x86_64-linux.conf | 7 + efiboot/loader/entries/archiso-x86_64-cd.conf | 5 - .../loader/entries/archiso-x86_64-usb.conf | 5 - .../loader/entries/uefi-shell-v1-x86_64.conf | 2 - .../loader/entries/uefi-shell-v2-x86_64.conf | 2 - efiboot/loader/loader.conf | 5 +- grub/grub.cfg | 81 +++++ isolinux/isolinux.cfg | 6 - mkinitcpio.conf | 2 - packages.both | 157 ---------- packages.i686 | 0 packages.x86_64 | 267 +++++++++++++++++ pacman.conf | 27 +- profiledef.sh | 27 ++ syslinux/archiso.cfg | 11 - syslinux/archiso_pxe.cfg | 36 --- syslinux/archiso_sys.cfg | 13 - syslinux/archiso_tail.cfg | 27 -- syslinux/splash.png | Bin 53545 -> 31295 bytes syslinux/syslinux.cfg | 14 +- .../{archiso_head.cfg => tuxOS_iso_head.cfg} | 13 +- syslinux/tuxOS_iso_pxe-linux.cfg | 32 ++ syslinux/tuxOS_iso_pxe.cfg | 5 + syslinux/tuxOS_iso_sys-linux.cfg | 9 + syslinux/tuxOS_iso_sys.cfg | 8 + syslinux/tuxOS_iso_tail.cfg | 35 +++ 102 files changed, 1262 insertions(+), 814 deletions(-) delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 airootfs/etc/fonts/conf.d/10-powerline-symbols.conf delete mode 100644 airootfs/etc/fstab create mode 100644 airootfs/etc/group create mode 100644 airootfs/etc/gshadow create mode 120000 airootfs/etc/localtime delete mode 100644 airootfs/etc/machine-id create mode 100644 airootfs/etc/mkinitcpio.conf create mode 100644 airootfs/etc/mkinitcpio.d/linux.preset create mode 100644 airootfs/etc/modprobe.d/broadcom-wl.conf create mode 100644 airootfs/etc/motd create mode 100644 airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook create mode 100644 airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook create mode 100644 airootfs/etc/passwd create mode 120000 airootfs/etc/resolv.conf create mode 100644 airootfs/etc/shadow delete mode 100644 airootfs/etc/skel/.bash_profile delete mode 100644 airootfs/etc/skel/.bashrc delete mode 100644 airootfs/etc/skel/.vimrc delete mode 100644 airootfs/etc/skel/.xinitrc delete mode 100644 airootfs/etc/skel/.xsession create mode 100644 airootfs/etc/ssh/sshd_config rename airootfs/etc/sudoers.d/{g_wheel => 02_g_wheel} (100%) create mode 100644 airootfs/etc/systemd/journald.conf.d/volatile-storage.conf create mode 100644 airootfs/etc/systemd/logind.conf.d/suspend.conf create mode 100644 airootfs/etc/systemd/network/20-ethernet.network create mode 100644 airootfs/etc/systemd/network/20-wlan.network create mode 100644 airootfs/etc/systemd/network/20-wwan.network create mode 120000 airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator create mode 120000 airootfs/etc/systemd/system/bluetooth.target.wants/bluetooth.service create mode 100644 airootfs/etc/systemd/system/choose-mirror.service create mode 120000 airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service create mode 120000 airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service create mode 120000 airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service create mode 120000 airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service create mode 120000 airootfs/etc/systemd/system/dbus-org.bluez.service create mode 120000 airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service create mode 120000 airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service create mode 120000 airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service create mode 120000 airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service create mode 120000 airootfs/etc/systemd/system/default.target create mode 120000 airootfs/etc/systemd/system/display-manager.service create mode 100644 airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/reflector.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/sshd.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service create mode 120000 airootfs/etc/systemd/system/multi-user.target.wants/wpa_supplicant.service create mode 120000 airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service create mode 100644 airootfs/etc/systemd/system/pacman-init.service create mode 100644 airootfs/etc/systemd/system/reflector.service.d/archiso.conf create mode 120000 airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service create mode 120000 airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service delete mode 100644 airootfs/etc/udev/rules.d/81-dhcpcd.rules create mode 100644 airootfs/etc/xdg/reflector/reflector.conf create mode 100755 airootfs/root/.automated_script.sh create mode 100644 airootfs/root/.zlogin delete mode 100644 airootfs/root/customize_airootfs.sh create mode 100755 airootfs/usr/local/bin/Installation_guide create mode 100755 airootfs/usr/local/bin/choose-mirror create mode 100755 airootfs/usr/local/bin/livecd-sound create mode 100644 airootfs/usr/local/share/livecd-sound/asound.conf.in create mode 100644 bootstrap_packages.x86_64 delete mode 100644 build.sh create mode 100644 efiboot/loader/entries/01-tuxOS-iso-x86_64-linux.conf delete mode 100644 efiboot/loader/entries/archiso-x86_64-cd.conf delete mode 100644 efiboot/loader/entries/archiso-x86_64-usb.conf delete mode 100644 efiboot/loader/entries/uefi-shell-v1-x86_64.conf delete mode 100644 efiboot/loader/entries/uefi-shell-v2-x86_64.conf create mode 100644 grub/grub.cfg delete mode 100644 isolinux/isolinux.cfg delete mode 100644 mkinitcpio.conf delete mode 100644 packages.both delete mode 100644 packages.i686 create mode 100644 profiledef.sh delete mode 100644 syslinux/archiso.cfg delete mode 100644 syslinux/archiso_pxe.cfg delete mode 100644 syslinux/archiso_sys.cfg delete mode 100644 syslinux/archiso_tail.cfg rename syslinux/{archiso_head.cfg => tuxOS_iso_head.cfg} (78%) create mode 100644 syslinux/tuxOS_iso_pxe-linux.cfg create mode 100644 syslinux/tuxOS_iso_pxe.cfg create mode 100644 syslinux/tuxOS_iso_sys-linux.cfg create mode 100644 syslinux/tuxOS_iso_sys.cfg create mode 100644 syslinux/tuxOS_iso_tail.cfg diff --git a/LICENSE b/LICENSE deleted file mode 100644 index a4c3478..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Appletneo - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 5cd92f5..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# tuxOS - -64-bit source code for the tuxOS diff --git a/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf b/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf deleted file mode 100644 index 7e34a12..0000000 --- a/airootfs/etc/fonts/conf.d/10-powerline-symbols.conf +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - monospace - PowerlineSymbols - - - Droid Sans Mono - PowerlineSymbols - - - Droid Sans Mono Slashed - PowerlineSymbols - - - Droid Sans Mono Dotted - PowerlineSymbols - - - DejaVu Sans Mono - PowerlineSymbols - - - DejaVu Sans Mono - PowerlineSymbols - - - Envy Code R - PowerlineSymbols - - - Inconsolata - PowerlineSymbols - - - Lucida Console - PowerlineSymbols - - - Monaco - PowerlineSymbols - - - Pragmata - PowerlineSymbols - - - PragmataPro - PowerlineSymbols - - - Menlo - PowerlineSymbols - - - Source Code Pro - PowerlineSymbols - - - Consolas - PowerlineSymbols - - - Anonymous pro - PowerlineSymbols - - - Bitstream Vera Sans Mono - PowerlineSymbols - - - Liberation Mono - PowerlineSymbols - - - Ubuntu Mono - PowerlineSymbols - - - Meslo LG L - PowerlineSymbols - - - Meslo LG L DZ - PowerlineSymbols - - - Meslo LG M - PowerlineSymbols - - - Meslo LG M DZ - PowerlineSymbols - - - Meslo LG S - PowerlineSymbols - - - Meslo LG S DZ - PowerlineSymbols - - diff --git a/airootfs/etc/fstab b/airootfs/etc/fstab deleted file mode 100644 index e69de29..0000000 diff --git a/airootfs/etc/group b/airootfs/etc/group new file mode 100644 index 0000000..fbe9da6 --- /dev/null +++ b/airootfs/etc/group @@ -0,0 +1,18 @@ +root:x:0:root +sys:x:3:bin,liveuser +network:x:90:liveuser +power:x:98:liveuser +adm:x:999:liveuser +lp:x:992:liveuser +wheel:x:998:liveuser +uucp:x:987:liveuser +optical:x:990:liveuser +scanner:x:991:liveuser +rfkill:x:983:liveuser +video:x:986:liveuser +storage:x:988:liveuser +audio:x:995:liveuser +users:x:985:liveuser +nopasswdlogin:x:966:liveuser +autologin:x:967:liveuser +liveuser:x:1000: diff --git a/airootfs/etc/gshadow b/airootfs/etc/gshadow new file mode 100644 index 0000000..a480506 --- /dev/null +++ b/airootfs/etc/gshadow @@ -0,0 +1,18 @@ +root:::root +sys:!!::liveuser +network:!!::liveuser +power:!!::liveuser +adm:!!::liveuser +lp:!!::liveuser +wheel:!!::liveuser +uucp:!!::liveuser +optical:!!::liveuser +scanner:!!::liveuser +rfkill:!!::liveuser +video:!!::liveuser +storage:!!::liveuser +audio:!!::liveuser +users:!!::liveuser +nopasswdlogin:!::liveuser +autologin:!::liveuser +liveuser:!:: \ No newline at end of file diff --git a/airootfs/etc/hostname b/airootfs/etc/hostname index 885c883..2dbe21e 100644 --- a/airootfs/etc/hostname +++ b/airootfs/etc/hostname @@ -1 +1 @@ -tuxOS +archiso diff --git a/airootfs/etc/locale.conf b/airootfs/etc/locale.conf index 01ec548..f9c983c 100644 --- a/airootfs/etc/locale.conf +++ b/airootfs/etc/locale.conf @@ -1 +1 @@ -LANG=en_US.UTF-8 +LANG=C.UTF-8 diff --git a/airootfs/etc/localtime b/airootfs/etc/localtime new file mode 120000 index 0000000..0e35b57 --- /dev/null +++ b/airootfs/etc/localtime @@ -0,0 +1 @@ +/usr/share/zoneinfo/UTC \ No newline at end of file diff --git a/airootfs/etc/machine-id b/airootfs/etc/machine-id deleted file mode 100644 index e69de29..0000000 diff --git a/airootfs/etc/mkinitcpio.conf b/airootfs/etc/mkinitcpio.conf new file mode 100644 index 0000000..e18aa9f --- /dev/null +++ b/airootfs/etc/mkinitcpio.conf @@ -0,0 +1,67 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES=(piix ide_disk reiserfs) +MODULES=() + +# BINARIES +# This setting includes any additional binaries a given user may +# wish into the CPIO image. This is run last, so it may be used to +# override the actual binaries included by a given hook +# BINARIES are dependency parsed, so you may safely ignore libraries +BINARIES=() + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in any way. This is useful for config files. +FILES=() + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H ' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +## This setup specifies all modules in the MODULES setting above. +## No raid, lvm2, or encrypted root is needed. +# HOOKS=(base) +# +## This setup will autodetect all modules for your system and should +## work as a sane default +# HOOKS=(base udev autodetect block filesystems) +# +## This setup will generate a 'full' image which supports most systems. +## No autodetection is done. +# HOOKS=(base udev block filesystems) +# +## This setup assembles a pata mdadm array with an encrypted root FS. +## Note: See 'mkinitcpio -H mdadm' for more information on raid devices. +# HOOKS=(base udev block mdadm encrypt filesystems) +# +## This setup loads an lvm2 volume group on a usb device. +# HOOKS=(base udev block lvm2 filesystems) +# +## NOTE: If you have /usr on a separate partition, you MUST include the +# usr, fsck and shutdown hooks. +HOOKS=(base udev modconf kms archiso archiso_loop_mnt block filesystems keyboard) + +# COMPRESSION +# Use this to compress the initramfs image. By default, gzip compression +# is used. Use 'cat' to create an uncompressed image. +#COMPRESSION="gzip" +#COMPRESSION="bzip2" +#COMPRESSION="lzma" +COMPRESSION="xz" +#COMPRESSION="lzop" +#COMPRESSION="lz4" +#COMPRESSION="zstd" + +# COMPRESSION_OPTIONS +# Additional options for the compressor +#COMPRESSION_OPTIONS=() diff --git a/airootfs/etc/mkinitcpio.d/linux.preset b/airootfs/etc/mkinitcpio.d/linux.preset new file mode 100644 index 0000000..9f67184 --- /dev/null +++ b/airootfs/etc/mkinitcpio.d/linux.preset @@ -0,0 +1,8 @@ +# mkinitcpio preset file for the 'linux' package on archiso + +PRESETS=('archiso') + +ALL_kver='/boot/vmlinuz-linux' +ALL_config='/etc/mkinitcpio.conf' + +archiso_image="/boot/initramfs-linux.img" diff --git a/airootfs/etc/modprobe.d/broadcom-wl.conf b/airootfs/etc/modprobe.d/broadcom-wl.conf new file mode 100644 index 0000000..0eae70c --- /dev/null +++ b/airootfs/etc/modprobe.d/broadcom-wl.conf @@ -0,0 +1,7 @@ +# The broadcom-wl package requires some modules to be disabled in order to use +# wl. Since the ISO image needs to cover many hardware cases, this file +# overrides the default blacklist in /usr/lib/modprobe.d/ +# +# If you need to use wl, you may need to delete this file, then `rmmod` any +# already-loaded modules that are now blacklisted before proceeding to modprobe +# wl itself. diff --git a/airootfs/etc/motd b/airootfs/etc/motd new file mode 100644 index 0000000..4d9eda1 --- /dev/null +++ b/airootfs/etc/motd @@ -0,0 +1,11 @@ +To install Arch Linux follow the installation guide: +https://wiki.archlinux.org/title/Installation_guide + +For Wi-Fi, authenticate to the wireless network using the iwctl utility. +For mobile broadband (WWAN) modems, connect with the mmcli utility. +Ethernet, WLAN and WWAN interfaces using DHCP should work automatically. + +After connecting to the internet, the installation guide can be accessed +via the convenience script Installation_guide. + +                                           diff --git a/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook b/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook new file mode 100644 index 0000000..342aa95 --- /dev/null +++ b/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook @@ -0,0 +1,13 @@ +# remove from airootfs! +[Trigger] +Operation = Install +Operation = Upgrade +Type = Package +Target = pacman-mirrorlist + +[Action] +Description = Uncommenting all mirrors in /etc/pacman.d/mirrorlist... +When = PostTransaction +Depends = pacman-mirrorlist +Depends = sed +Exec = /usr/bin/sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist diff --git a/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook b/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook new file mode 100644 index 0000000..8dfb943 --- /dev/null +++ b/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook @@ -0,0 +1,18 @@ +# remove from airootfs! +# As a workaround for https://bugs.archlinux.org/task/49347 , remove pacman hooks specific to the ISO build process. +# If not, they would be used when pacstrap is run in the live environment. + +[Trigger] +Operation = Install +Operation = Upgrade +Operation = Remove +Type = Package +Target = * + +[Action] +Description = Work around FS#49347 by removing custom pacman hooks that are only required during ISO build... +When = PostTransaction +Depends = sh +Depends = coreutils +Depends = grep +Exec = /bin/sh -c "rm -- $(grep -Frl 'remove from airootfs' /etc/pacman.d/hooks/)" diff --git a/airootfs/etc/passwd b/airootfs/etc/passwd new file mode 100644 index 0000000..be2f4c6 --- /dev/null +++ b/airootfs/etc/passwd @@ -0,0 +1,2 @@ +root:x:0:0:root:/root:/usr/bin/zsh +liveuser:x:1000:1000::/home/liveuser:/usr/bin/zsh diff --git a/airootfs/etc/resolv.conf b/airootfs/etc/resolv.conf new file mode 120000 index 0000000..3639662 --- /dev/null +++ b/airootfs/etc/resolv.conf @@ -0,0 +1 @@ +/run/systemd/resolve/stub-resolv.conf \ No newline at end of file diff --git a/airootfs/etc/shadow b/airootfs/etc/shadow new file mode 100644 index 0000000..ef68b02 --- /dev/null +++ b/airootfs/etc/shadow @@ -0,0 +1,2 @@ +root::14871:::::: +liveuser:$6$f9ezDgQ0TRc20Drh$V/xFYNZyiKRKJ2wKm17HJ0TZOEesT0Xa/GZ8oyJaXOlhMzEHp.MTC2nBIxSfKPZcyXLm6tnIhUoqr0kXSWUJV/:14871:::::: diff --git a/airootfs/etc/skel/.bash_profile b/airootfs/etc/skel/.bash_profile deleted file mode 100644 index a0ef212..0000000 --- a/airootfs/etc/skel/.bash_profile +++ /dev/null @@ -1,7 +0,0 @@ -# -# ~/.bash_profile -# - -[[ -f ~/.bashrc ]] && . ~/.bashrc - -[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx \ No newline at end of file diff --git a/airootfs/etc/skel/.bashrc b/airootfs/etc/skel/.bashrc deleted file mode 100644 index 3ad765c..0000000 --- a/airootfs/etc/skel/.bashrc +++ /dev/null @@ -1,49 +0,0 @@ -# -# ~/.bashrc -# - -# If not running interactively, don't do anything -[[ $- != *i* ]] && return - -# environment variables -export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'leafpad'; else echo 'nano'; fi)" # leafpad, nano - -PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;37m\]' - -# pacman aliases (if desired, adapt for your favourite AUR helper) -alias pac="sudo /usr/bin/pacman -S" # default action - install one or more packages -alias pacu="sudo /usr/bin/pacman -Syu" # '[u]pdate' - upgrade all packages to their newest version -alias pacr="sudo /usr/bin/pacman -Rns" # '[r]emove' - uninstall one or more packages -alias pacs="/usr/bin/pacman -Ss" # '[s]earch' - search for a package using one or more keywords -alias paci="/usr/bin/pacman -Si" # '[i]nfo' - show information about a package -alias paclo="/usr/bin/pacman -Qdt" # '[l]ist [o]rphans' - list all packages which are orphaned -alias pacc="sudo /usr/bin/pacman -Scc" # '[c]lean cache' - delete all not currently installed package files -alias paclf="/usr/bin/pacman -Ql" # '[l]ist [f]iles' - list all files installed by a given package -alias pacexpl="sudo /usr/bin/pacman -D --asexp" # 'mark as [expl]icit' - mark one or more packages as explicitly installed -alias pacimpl="sudo /usr/bin/pacman -D --asdep" # 'mark as [impl]icit' - mark one or more packages as non explicitly installed - -# '[r]emove [o]rphans' - recursively remove ALL orphaned packages -alias pacro="/usr/bin/pacman -Qtdq > /dev/null && sudo /usr/bin/pacman -Rns \$(/usr/bin/pacman -Qtdq | sed -e ':a;N;$!ba;s/\n/ /g')" - -# Custom -alias led='leafpad ~/.bashrc' -alias bsu='source ~/.bashrc' -alias psync='sudo pacman -Syy' -alias paco='sudo pacman -Sc && sudo pacman-optimize' -alias pcf='profile-cleaner f' -alias pcc='profile-cleaner c' -alias pcg='profile-cleaner gc' -alias yd='youtube-dl' -alias lcp='sudo localepurge' -alias lcc='sudo /usr/bin/localepurge-config' -alias speed='speedtest-cli' -alias q='exit' -alias md='sudo updatedb' -alias fig='sudo leafpad /etc/pacman.conf' -alias yrt='yaourt -S' - -#powerline -powerline-daemon -q -POWERLINE_BASH_CONTINUATION=1 -POWERLINE_BASH_SELECT=1 -. /usr/lib/python3.6/site-packages/powerline/bindings/bash/powerline.sh \ No newline at end of file diff --git a/airootfs/etc/skel/.vimrc b/airootfs/etc/skel/.vimrc deleted file mode 100644 index 0e98664..0000000 --- a/airootfs/etc/skel/.vimrc +++ /dev/null @@ -1,3 +0,0 @@ -set rtp+=/usr/lib/python3.6/site-packages/powerline/bindings/vim/ -set laststatus=2 -set t_Co=256 \ No newline at end of file diff --git a/airootfs/etc/skel/.xinitrc b/airootfs/etc/skel/.xinitrc deleted file mode 100644 index 1f3f5c2..0000000 --- a/airootfs/etc/skel/.xinitrc +++ /dev/null @@ -1,15 +0,0 @@ - -#!/bin/sh -# -# ~/.xinitrc -# -# Executed by startx (run your window manager from here) - -if [ -d /etc/X11/xinit/xinitrc.d ]; then - for f in /etc/X11/xinit/xinitrc.d/*; do - [ -x "$f" ] && . "$f" - done - unset f -fi - -exec i3 diff --git a/airootfs/etc/skel/.xsession b/airootfs/etc/skel/.xsession deleted file mode 100644 index e4aaa14..0000000 --- a/airootfs/etc/skel/.xsession +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -# -# ~/.xsession -# -# Executed by xdm/gdm/kdm at login -# - -/bin/bash --login -i ~/.xinitrc \ No newline at end of file diff --git a/airootfs/etc/ssh/sshd_config b/airootfs/etc/ssh/sshd_config new file mode 100644 index 0000000..dc22c11 --- /dev/null +++ b/airootfs/etc/ssh/sshd_config @@ -0,0 +1,116 @@ +# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $ + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/bin + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +#Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys +AuthorizedKeysFile .ssh/authorized_keys + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to no here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to no to disable s/key passwords +KbdInteractiveAuthentication no + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the KbdInteractiveAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via KbdInteractiveAuthentication may bypass +# the setting of "PermitRootLogin prohibit-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and KbdInteractiveAuthentication to 'no'. +UsePAM yes + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +#X11Forwarding no +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +PrintMotd no +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# override default of no subsystems +Subsystem sftp /usr/lib/ssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server diff --git a/airootfs/etc/sudoers.d/g_wheel b/airootfs/etc/sudoers.d/02_g_wheel similarity index 100% rename from airootfs/etc/sudoers.d/g_wheel rename to airootfs/etc/sudoers.d/02_g_wheel diff --git a/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf b/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf new file mode 100644 index 0000000..b69850d --- /dev/null +++ b/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf @@ -0,0 +1,2 @@ +[Journal] +Storage=volatile diff --git a/airootfs/etc/systemd/logind.conf.d/suspend.conf b/airootfs/etc/systemd/logind.conf.d/suspend.conf new file mode 100644 index 0000000..e04b068 --- /dev/null +++ b/airootfs/etc/systemd/logind.conf.d/suspend.conf @@ -0,0 +1,4 @@ +[Login] +HandleSuspendKey=suspend +HandleHibernateKey=hibernate +HandleLidSwitch=suspend diff --git a/airootfs/etc/systemd/network/20-ethernet.network b/airootfs/etc/systemd/network/20-ethernet.network new file mode 100644 index 0000000..9ada778 --- /dev/null +++ b/airootfs/etc/systemd/network/20-ethernet.network @@ -0,0 +1,21 @@ +[Match] +# Matching with "Type=ether" causes issues with containers because it also matches virtual Ethernet interfaces (veth*). +# See https://bugs.archlinux.org/task/70892 +# Instead match by globbing the network interface name. +Name=en* +Name=eth* + +[Network] +DHCP=yes +IPv6PrivacyExtensions=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=100 + +[IPv6AcceptRA] +RouteMetric=100 diff --git a/airootfs/etc/systemd/network/20-wlan.network b/airootfs/etc/systemd/network/20-wlan.network new file mode 100644 index 0000000..601d5b8 --- /dev/null +++ b/airootfs/etc/systemd/network/20-wlan.network @@ -0,0 +1,17 @@ +[Match] +Name=wl* + +[Network] +DHCP=yes +IPv6PrivacyExtensions=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=600 + +[IPv6AcceptRA] +RouteMetric=600 diff --git a/airootfs/etc/systemd/network/20-wwan.network b/airootfs/etc/systemd/network/20-wwan.network new file mode 100644 index 0000000..9104c24 --- /dev/null +++ b/airootfs/etc/systemd/network/20-wwan.network @@ -0,0 +1,17 @@ +[Match] +Name=ww* + +[Network] +DHCP=yes +IPv6PrivacyExtensions=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=700 + +[IPv6AcceptRA] +RouteMetric=700 diff --git a/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator b/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator new file mode 120000 index 0000000..dc1dc0c --- /dev/null +++ b/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator @@ -0,0 +1 @@ +/dev/null \ No newline at end of file diff --git a/airootfs/etc/systemd/system/bluetooth.target.wants/bluetooth.service b/airootfs/etc/systemd/system/bluetooth.target.wants/bluetooth.service new file mode 120000 index 0000000..d256bfe --- /dev/null +++ b/airootfs/etc/systemd/system/bluetooth.target.wants/bluetooth.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/bluetooth.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/choose-mirror.service b/airootfs/etc/systemd/system/choose-mirror.service new file mode 100644 index 0000000..b6a3562 --- /dev/null +++ b/airootfs/etc/systemd/system/choose-mirror.service @@ -0,0 +1,10 @@ +[Unit] +Description=Choose mirror from the kernel command line +ConditionKernelCommandLine=mirror + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/choose-mirror + +[Install] +WantedBy=multi-user.target diff --git a/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service new file mode 120000 index 0000000..ebc50f0 --- /dev/null +++ b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-config.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service new file mode 120000 index 0000000..80fa3c8 --- /dev/null +++ b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-final.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service new file mode 120000 index 0000000..dd8e9f1 --- /dev/null +++ b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-local.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service new file mode 120000 index 0000000..24c7a26 --- /dev/null +++ b/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.bluez.service b/airootfs/etc/systemd/system/dbus-org.bluez.service new file mode 120000 index 0000000..d256bfe --- /dev/null +++ b/airootfs/etc/systemd/system/dbus-org.bluez.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/bluetooth.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service new file mode 120000 index 0000000..dcf7c8e --- /dev/null +++ b/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ModemManager.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service new file mode 120000 index 0000000..4c158e6 --- /dev/null +++ b/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service new file mode 120000 index 0000000..4f6ae34 --- /dev/null +++ b/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/default.target b/airootfs/etc/systemd/system/default.target new file mode 120000 index 0000000..cf9fa51 --- /dev/null +++ b/airootfs/etc/systemd/system/default.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/graphical.target \ No newline at end of file diff --git a/airootfs/etc/systemd/system/display-manager.service b/airootfs/etc/systemd/system/display-manager.service new file mode 120000 index 0000000..56f1df2 --- /dev/null +++ b/airootfs/etc/systemd/system/display-manager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sddm.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount b/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount new file mode 100644 index 0000000..0ba0e67 --- /dev/null +++ b/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount @@ -0,0 +1,8 @@ +[Unit] +Description=Temporary /etc/pacman.d/gnupg directory + +[Mount] +What=ramfs +Where=/etc/pacman.d/gnupg +Type=ramfs +Options=mode=0755 diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service b/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service new file mode 120000 index 0000000..dcf7c8e --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ModemManager.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service b/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service new file mode 120000 index 0000000..e874a9b --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/NetworkManager.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service b/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service new file mode 120000 index 0000000..2d8d256 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service @@ -0,0 +1 @@ +../choose-mirror.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service b/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service new file mode 120000 index 0000000..20ac7b2 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_fcopy_daemon.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service b/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service new file mode 120000 index 0000000..a7eac4a --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_kvp_daemon.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service b/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service new file mode 120000 index 0000000..eae19ef --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_vss_daemon.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service b/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service new file mode 120000 index 0000000..d09eec6 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service @@ -0,0 +1 @@ +../pacman-init.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service b/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service new file mode 120000 index 0000000..d372729 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/reflector.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service b/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service new file mode 120000 index 0000000..d21ebd9 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service b/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service new file mode 120000 index 0000000..4f6ae34 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service b/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service new file mode 120000 index 0000000..cb2d560 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vboxservice.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service b/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service new file mode 120000 index 0000000..e0a11a7 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vmtoolsd.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service b/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service new file mode 120000 index 0000000..173f306 --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vmware-vmblock-fuse.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/multi-user.target.wants/wpa_supplicant.service b/airootfs/etc/systemd/system/multi-user.target.wants/wpa_supplicant.service new file mode 120000 index 0000000..1aff68e --- /dev/null +++ b/airootfs/etc/systemd/system/multi-user.target.wants/wpa_supplicant.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/wpa_supplicant.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service b/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service new file mode 120000 index 0000000..b78b586 --- /dev/null +++ b/airootfs/etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/NetworkManager-wait-online.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/pacman-init.service b/airootfs/etc/systemd/system/pacman-init.service new file mode 100644 index 0000000..b824884 --- /dev/null +++ b/airootfs/etc/systemd/system/pacman-init.service @@ -0,0 +1,15 @@ +[Unit] +Description=Initializes Pacman keyring +Requires=etc-pacman.d-gnupg.mount +After=etc-pacman.d-gnupg.mount time-sync.target +BindsTo=etc-pacman.d-gnupg.mount +Before=archlinux-keyring-wkd-sync.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/pacman-key --init +ExecStart=/usr/bin/pacman-key --populate + +[Install] +WantedBy=multi-user.target diff --git a/airootfs/etc/systemd/system/reflector.service.d/archiso.conf b/airootfs/etc/systemd/system/reflector.service.d/archiso.conf new file mode 100644 index 0000000..de6664d --- /dev/null +++ b/airootfs/etc/systemd/system/reflector.service.d/archiso.conf @@ -0,0 +1,6 @@ +[Unit] +ConditionKernelCommandLine=!mirror + +[Service] +Restart=on-failure +RestartSec=10 diff --git a/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service b/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service new file mode 120000 index 0000000..cabf28b --- /dev/null +++ b/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-time-wait-sync.service \ No newline at end of file diff --git a/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service b/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/airootfs/etc/udev/rules.d/81-dhcpcd.rules b/airootfs/etc/udev/rules.d/81-dhcpcd.rules deleted file mode 100644 index 1c4053c..0000000 --- a/airootfs/etc/udev/rules.d/81-dhcpcd.rules +++ /dev/null @@ -1 +0,0 @@ -ACTION=="add", SUBSYSTEM=="net", ENV{INTERFACE}=="en*|eth*", ENV{SYSTEMD_WANTS}="dhcpcd@$name.service" diff --git a/airootfs/etc/xdg/reflector/reflector.conf b/airootfs/etc/xdg/reflector/reflector.conf new file mode 100644 index 0000000..7c830d2 --- /dev/null +++ b/airootfs/etc/xdg/reflector/reflector.conf @@ -0,0 +1,8 @@ +# Reflector configuration file for the systemd service. + +--save /etc/pacman.d/mirrorlist +--ipv4 +--ipv6 +--protocol https +--latest 20 +--sort rate diff --git a/airootfs/root/.automated_script.sh b/airootfs/root/.automated_script.sh new file mode 100755 index 0000000..52c47e6 --- /dev/null +++ b/airootfs/root/.automated_script.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +script_cmdline () +{ + local param + for param in $(< /proc/cmdline); do + case "${param}" in + script=*) echo "${param#*=}" ; return 0 ;; + esac + done +} + +automated_script () +{ + local script rt + script="$(script_cmdline)" + if [[ -n "${script}" && ! -x /tmp/startup_script ]]; then + if [[ "${script}" =~ ^((http|https|ftp)://) ]]; then + curl "${script}" --location --retry-connrefused --retry 10 -s -o /tmp/startup_script >/dev/null + rt=$? + else + cp "${script}" /tmp/startup_script + rt=$? + fi + if [[ ${rt} -eq 0 ]]; then + chmod +x /tmp/startup_script + /tmp/startup_script + fi + fi +} + +if [[ $(tty) == "/dev/tty1" ]]; then + automated_script +fi diff --git a/airootfs/root/.zlogin b/airootfs/root/.zlogin new file mode 100644 index 0000000..bf6bc8f --- /dev/null +++ b/airootfs/root/.zlogin @@ -0,0 +1,6 @@ +# fix for screen readers +if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then + setopt SINGLE_LINE_ZLE +fi + +~/.automated_script.sh diff --git a/airootfs/root/customize_airootfs.sh b/airootfs/root/customize_airootfs.sh deleted file mode 100644 index bedbc81..0000000 --- a/airootfs/root/customize_airootfs.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -set -e -u -sed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen -locale-gen -ln -sf /usr/share/zoneinfo/UTC /etc/localtime -usermod -s /usr/bin/bash root -cp -aT /etc/skel/ /root/ - -#Create Liveuser -useradd -m -p "" -g users -G "adm,audio,floppy,log,network,rfkill,scanner,storage,optical,power,wheel" -s /bin/bash liveuser -#chmod 700 /root -chown -R liveuser:users /home/liveuser - -#Load Appletneo Configuration -#cd /usr/bin -#dconf load / < desktop.dconf -#cd - - -#tuxOS Name -sed -i.bak 's/Arch Linux/tux OS/g' /usr/lib/os-release -sed -i.bak 's/ID=arch/ID=tux/g' /usr/lib/os-release -sed -i.bak 's/ID_LIKE=archlinux/ID_LIKE=tuxlinux/g' /usr/lib/os-release -sed -i.bak 's/www.archlinux.org/www.appletneo.com/g' /usr/lib/os-release -sed -i.bak 's/bbs.archlinux.org/www.appletneo.com/g' /usr/lib/os-release -sed -i.bak 's/bugs.archlinux.org/www.appletneo.com/g' /usr/lib/os-release -#cp /usr/lib/os-release /etc/os-release - -sed -i 's/#\(PermitRootLogin \).\+/\1yes/' /etc/ssh/sshd_config -sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist -sed -i 's/#\(Storage=\)auto/\1volatile/' /etc/systemd/journald.conf - -sed -i 's/#\(HandleSuspendKey=\)suspend/\1ignore/' /etc/systemd/logind.conf -sed -i 's/#\(HandleHibernateKey=\)hibernate/\1ignore/' /etc/systemd/logind.conf -sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' /etc/systemd/logind.conf - -#systemctl enable pacman-init.service choose-mirror.service -systemctl set-default multi-user.target diff --git a/airootfs/usr/local/bin/Installation_guide b/airootfs/usr/local/bin/Installation_guide new file mode 100755 index 0000000..4266754 --- /dev/null +++ b/airootfs/usr/local/bin/Installation_guide @@ -0,0 +1,5 @@ +#!/bin/sh +# +# SPDX-License-Identifier: GPL-3.0-or-later + +exec lynx 'https://wiki.archlinux.org/title/Installation_guide' diff --git a/airootfs/usr/local/bin/choose-mirror b/airootfs/usr/local/bin/choose-mirror new file mode 100755 index 0000000..b021945 --- /dev/null +++ b/airootfs/usr/local/bin/choose-mirror @@ -0,0 +1,28 @@ +#!/bin/bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +get_cmdline() { + local param + for param in $(< /proc/cmdline); do + case "${param}" in + $1=*) echo "${param##*=}"; + return 0 + ;; + esac + done +} + +mirror=$(get_cmdline mirror) +[[ $mirror = auto ]] && mirror=$(get_cmdline archiso_http_srv) +[[ $mirror ]] || exit 0 + +mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.orig +cat >/etc/pacman.d/mirrorlist << EOF +# +# Arch Linux repository mirrorlist +# Generated by archiso +# + +Server = ${mirror%%/}/\$repo/os/\$arch +EOF diff --git a/airootfs/usr/local/bin/livecd-sound b/airootfs/usr/local/bin/livecd-sound new file mode 100755 index 0000000..baae0d2 --- /dev/null +++ b/airootfs/usr/local/bin/livecd-sound @@ -0,0 +1,248 @@ +#!/usr/bin/env bash +# +# SPDX-License-Identifier: GPL-3.0-or-later + +usage() { + cat <<- _EOF_ + live cd sound helper script. + Usage: livecdsound [OPTION] + OPTIONS + -u, --unmute unmute all sound cards + -p, --pick select a card for speetch output + -h, --help Show this usage message + +_EOF_ +} + +bugout () { + printf "/usr/local/bin/livecdsound: programming error" + stat_fail +} + +echo_card_indices() +{ + if [ -f /proc/asound/cards ] ; then + sed -n -e's/^[[:space:]]*\([0-7]\)[[:space:]].*/\1/p' /proc/asound/cards + fi +} + +# The following functions try to set many controls. +# No card has all the controls and so some of the attempts are bound to fail. +# Because of this, the functions can't return useful status values. + +# $1 +# $2 +# $3 +unmute_and_set_level(){ + { [ "$3" ] &&[ "$2" ] && [ "$1" ] ; } || bugout + systemd-cat -t "livecdsound" printf "Setting: %s on card: %s to %s\n" "$2" "$1" "$3" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" unmute + return 0 +} + +# $1 +# $2 +mute_and_zero_level() +{ + { [ "$1" ] && [ "$2" ] ; } || bugout + systemd-cat -t "livecdsound" printf "Muting control: %s on card: %s\n" "$2" "$1" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "0%" mute + return 0 +} + +# $1 +# $2 +# $3 "on" | "off" +switch_control() +{ + { [ "$3" ] && [ "$1" ] ; } || bugout + systemd-cat -t "livecdsound" printf "Switching control: %s on card: %s to %s\n" "$2" "$1" "$3" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" + return 0 +} + +# $1 +sanify_levels_on_card() +{ + unmute_and_set_level "$1" "Front" "80%" + unmute_and_set_level "$1" "Master" "80%" + unmute_and_set_level "$1" "Master Mono" "80%" + unmute_and_set_level "$1" "Master Digital" "80%" # E.g., cs4237B + unmute_and_set_level "$1" "Playback" "80%" + unmute_and_set_level "$1" "Headphone" "100%" + unmute_and_set_level "$1" "PCM" "80%" + unmute_and_set_level "$1" "PCM,1" "80%" # E.g., ess1969 + unmute_and_set_level "$1" "DAC" "80%" # E.g., envy24, cs46xx + unmute_and_set_level "$1" "DAC,0" "80%" # E.g., envy24 + unmute_and_set_level "$1" "DAC,1" "80%" # E.g., envy24 + unmute_and_set_level "$1" "Synth" "80%" + unmute_and_set_level "$1" "CD" "80%" + unmute_and_set_level "$1" "PC Speaker" "100%" + + mute_and_zero_level "$1" "Mic" + mute_and_zero_level "$1" "IEC958" # Ubuntu #19648 + + # Intel P4P800-MX + switch_control "$1" "Master Playback Switch" on + switch_control "$1" "Master Surround" on + + # Trident/YMFPCI/emu10k1: + unmute_and_set_level "$1" "Wave" "80%" + unmute_and_set_level "$1" "Music" "80%" + unmute_and_set_level "$1" "AC97" "80%" + + # DRC: + unmute_and_set_level "$1" "Dynamic Range Compression" "80%" + + # Required for HDA Intel (hda-intel): + unmute_and_set_level "$1" "Front" "80%" + + # Required for SB Live 7.1/24-bit (ca0106): + unmute_and_set_level "$1" "Analog Front" "80%" + + # Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard + switch_control "$1" "IEC958 Capture Monitor" off + + # Required for hardware allowing toggles for AC97 through IEC958, + # valid values are 0, 1, 2, 3. Needs to be set to 0 for PCM1. + unmute_and_set_level "$1" "IEC958 Playback AC97-SPSA" "0" + + # Required for newer Via hardware + unmute_and_set_level "$1" "VIA DXS,0" "80%" + unmute_and_set_level "$1" "VIA DXS,1" "80%" + unmute_and_set_level "$1" "VIA DXS,2" "80%" + unmute_and_set_level "$1" "VIA DXS,3" "80%" + + # Required on some notebooks with ICH4: + switch_control "$1" "Headphone Jack Sense" off + switch_control "$1" "Line Jack Sense" off + + # Some machines need one or more of these to be on; + # others need one or more of these to be off: + + switch_control "$1" "Audigy Analog/Digital Output Jack" on + switch_control "$1" "SB Live Analog/Digital Output Jack" on + + # D1984 -- Thinkpad T61/X61 + switch_control "$1" "Speaker" on + switch_control "$1" "Headphone" on + + # HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823) + unmute_and_set_level "$1" "Digital" "80%" + + return 0 +} + +# $1 | "all" +sanify_levels() +{ + local ttsdml_returnstatus=0 + local card + case "$1" in + all) + for card in $(echo_card_indices) ; do + sanify_levels_on_card "$card" || ttsdml_returnstatus=1 + done + ;; + *) + sanify_levels_on_card "$1" || ttsdml_returnstatus=1 + ;; + esac + return $ttsdml_returnstatus +} + +# List all cards that *should* be usable for PCM audio. In my experience, +# the console speaker (handled by the pcsp driver) isn't a suitable playback +# device, so we'll exclude it. +list_non_pcsp_cards() +{ + for card in $(echo_card_indices); do + local cardfile="/proc/asound/card${card}/id" + if [ -r "$cardfile" ] && [ -f "$cardfile" ] && \ + [ "$(cat "$cardfile")" != pcsp ]; then + echo "$card" + fi + done +} + +# Properly initialize the sound card so that we have audio at boot. +unmute_all_cards() +{ + sanify_levels all +} + +is_numeric() { + local str=$1 + [[ "$str" =~ ^[0-9]+$ ]] +} + +set_default_card() { + local card=$1 + sed -e "s/%card%/$card/g" < /usr/local/share/livecd-sound/asound.conf.in \ + > /etc/asound.conf +} + +play_on_card() { + local card=$1 file=$2 + aplay -q "-Dplughw:$card,0" "$file" +} + +# If there are multiple usable sound cards, prompt the user to choose one, +# using auditory feedback. +pick_a_card() +{ + set -f + usable_cards="$(list_non_pcsp_cards)" + num_usable_cards="$(wc -w <<< "$usable_cards")" + + if [ "$num_usable_cards" -eq 1 ]; then + systemd-cat -t "livecdsound" printf "Only one sound card is detected\n" + exit 0 + fi + systemd-cat -t "livecdsound" printf "multiple sound cards detected\n" + for card in $usable_cards; do + if ! is_numeric "$card"; then + continue + fi + play_on_card "$card" /usr/share/livecd-sounds/pick-a-card.wav& + done + wait + sleep 1 + for card in $usable_cards; do + if ! is_numeric "$card"; then + continue + fi + play_on_card "$card" /usr/share/livecd-sounds/beep.wav + if read -r -t 10; then + systemd-cat -t "livecdsound" printf "Selecting %s sound card as default\n" "$card" + set_default_card "$card" + break + fi +done +} + +if [[ $# -eq 0 ]]; then + echo "error: No argument passed." + exit 1 +fi +while [[ "${1}" != "" ]]; do + case ${1} in + -h|--help) + usage + exit + ;; + -u|--unmute) + systemd-cat -t "livecdsound" printf "Unmuting all cards" + unmute_all_cards + ;; + -p|--pick) + pick_a_card + ;; + *) + echo "error: Unsupported argument" + usage + exit 1 + ;; + esac + shift +done diff --git a/airootfs/usr/local/share/livecd-sound/asound.conf.in b/airootfs/usr/local/share/livecd-sound/asound.conf.in new file mode 100644 index 0000000..3f9c7aa --- /dev/null +++ b/airootfs/usr/local/share/livecd-sound/asound.conf.in @@ -0,0 +1,3 @@ +Defaults node +defaults.ctl.card %card%; +defaults.pcm.card %card%; diff --git a/bootstrap_packages.x86_64 b/bootstrap_packages.x86_64 new file mode 100644 index 0000000..64966d0 --- /dev/null +++ b/bootstrap_packages.x86_64 @@ -0,0 +1,2 @@ +arch-install-scripts +base diff --git a/build.sh b/build.sh deleted file mode 100644 index 29b44db..0000000 --- a/build.sh +++ /dev/null @@ -1,279 +0,0 @@ -#!/bin/bash - -set -e -u - -iso_name=tuxOS -iso_label="tuxOS_$(date +%Y%m)" -iso_version=$(date +%Y.%m.%d) -install_dir=arch -work_dir=work -out_dir=out -gpg_key= - -arch=$(uname -m) -verbose="" -script_path=$(readlink -f ${0%/*}) - -_usage () -{ - echo "usage ${0} [options]" - echo - echo " General options:" - echo " -N Set an iso filename (prefix)" - echo " Default: ${iso_name}" - echo " -V Set an iso version (in filename)" - echo " Default: ${iso_version}" - echo " -L Set an iso label (disk label)" - echo " Default: ${iso_label}" - echo " -D Set an install_dir (directory inside iso)" - echo " Default: ${install_dir}" - echo " -w Set the working directory" - echo " Default: ${work_dir}" - echo " -o Set the output directory" - echo " Default: ${out_dir}" - echo " -v Enable verbose output" - echo " -h This help message" - exit ${1} -} - -# Helper function to run make_*() only one time per architecture. -run_once() { - if [[ ! -e ${work_dir}/build.${1}_${arch} ]]; then - $1 - touch ${work_dir}/build.${1}_${arch} - fi -} - -# Setup custom pacman.conf with current cache directories. -make_pacman_conf() { - local _cache_dirs - _cache_dirs=($(pacman -v 2>&1 | grep '^Cache Dirs:' | sed 's/Cache Dirs:\s*//g')) - sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n ${_cache_dirs[@]})|g" ${script_path}/pacman.conf > ${work_dir}/pacman.conf -} - -# Base installation, plus needed packages (airootfs) -make_basefs() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" init - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "haveged intel-ucode memtest86+ mkinitcpio-nfs-utils nbd zsh" install -} - -# Additional packages (airootfs) -make_packages() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "$(grep -h -v ^# ${script_path}/packages.{both,${arch}})" install -} - -# Needed packages for x86_64 EFI boot -make_packages_efi() { - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -p "efitools" install -} - -# Copy mkinitcpio archiso hooks and build initramfs (airootfs) -make_setup_mkinitcpio() { - local _hook - mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/hooks - mkdir -p ${work_dir}/${arch}/airootfs/etc/initcpio/install - for _hook in archiso archiso_shutdown archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs archiso_loop_mnt; do - cp /usr/lib/initcpio/hooks/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/hooks - cp /usr/lib/initcpio/install/${_hook} ${work_dir}/${arch}/airootfs/etc/initcpio/install - done - sed -i "s|/usr/lib/initcpio/|/etc/initcpio/|g" ${work_dir}/${arch}/airootfs/etc/initcpio/install/archiso_shutdown - cp /usr/lib/initcpio/install/archiso_kms ${work_dir}/${arch}/airootfs/etc/initcpio/install - cp /usr/lib/initcpio/archiso_shutdown ${work_dir}/${arch}/airootfs/etc/initcpio - cp ${script_path}/mkinitcpio.conf ${work_dir}/${arch}/airootfs/etc/mkinitcpio-archiso.conf - gnupg_fd= - if [[ ${gpg_key} ]]; then - gpg --export ${gpg_key} >${work_dir}/gpgkey - exec 17<>${work_dir}/gpgkey - fi - ARCHISO_GNUPG_FD=${gpg_key:+17} setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r 'mkinitcpio -c /etc/mkinitcpio-archiso.conf -k /boot/vmlinuz-linux -g /boot/archiso.img' run - if [[ ${gpg_key} ]]; then - exec 17<&- - fi -} - -# Customize installation (airootfs) -make_customize_airootfs() { - cp -af ${script_path}/airootfs ${work_dir}/${arch} - - curl -o ${work_dir}/${arch}/airootfs/etc/pacman.d/mirrorlist 'https://www.archlinux.org/mirrorlist/?country=all&protocol=http&use_mirror_status=on' - - lynx -dump -nolist 'https://wiki.archlinux.org/index.php/Installation_Guide?action=render' >> ${work_dir}/${arch}/airootfs/root/install.txt - - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}/${arch}" -C "${work_dir}/pacman.conf" -D "${install_dir}" -r '/root/customize_airootfs.sh' run - rm ${work_dir}/${arch}/airootfs/root/customize_airootfs.sh -} - -# Prepare kernel/initramfs ${install_dir}/boot/ -make_boot() { - mkdir -p ${work_dir}/iso/${install_dir}/boot/${arch} - cp ${work_dir}/${arch}/airootfs/boot/archiso.img ${work_dir}/iso/${install_dir}/boot/${arch}/archiso.img - cp ${work_dir}/${arch}/airootfs/boot/vmlinuz-linux ${work_dir}/iso/${install_dir}/boot/${arch}/vmlinuz -} - -# Add other aditional/extra files to ${install_dir}/boot/ -make_boot_extra() { - cp ${work_dir}/${arch}/airootfs/boot/memtest86+/memtest.bin ${work_dir}/iso/${install_dir}/boot/memtest - cp ${work_dir}/${arch}/airootfs/usr/share/licenses/common/GPL2/license.txt ${work_dir}/iso/${install_dir}/boot/memtest.COPYING - cp ${work_dir}/${arch}/airootfs/boot/intel-ucode.img ${work_dir}/iso/${install_dir}/boot/intel_ucode.img - cp ${work_dir}/${arch}/airootfs/usr/share/licenses/intel-ucode/LICENSE ${work_dir}/iso/${install_dir}/boot/intel_ucode.LICENSE -} - -# Prepare /${install_dir}/boot/syslinux -make_syslinux() { - mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux - for _cfg in ${script_path}/syslinux/*.cfg; do - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" ${_cfg} > ${work_dir}/iso/${install_dir}/boot/syslinux/${_cfg##*/} - done - cp ${script_path}/syslinux/splash.png ${work_dir}/iso/${install_dir}/boot/syslinux - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/*.c32 ${work_dir}/iso/${install_dir}/boot/syslinux - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/lpxelinux.0 ${work_dir}/iso/${install_dir}/boot/syslinux - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/memdisk ${work_dir}/iso/${install_dir}/boot/syslinux - mkdir -p ${work_dir}/iso/${install_dir}/boot/syslinux/hdt - gzip -c -9 ${work_dir}/${arch}/airootfs/usr/share/hwdata/pci.ids > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/pciids.gz - gzip -c -9 ${work_dir}/${arch}/airootfs/usr/lib/modules/*-ARCH/modules.alias > ${work_dir}/iso/${install_dir}/boot/syslinux/hdt/modalias.gz -} - -# Prepare /isolinux -make_isolinux() { - mkdir -p ${work_dir}/iso/isolinux - sed "s|%INSTALL_DIR%|${install_dir}|g" ${script_path}/isolinux/isolinux.cfg > ${work_dir}/iso/isolinux/isolinux.cfg - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isolinux.bin ${work_dir}/iso/isolinux/ - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/isohdpfx.bin ${work_dir}/iso/isolinux/ - cp ${work_dir}/${arch}/airootfs/usr/lib/syslinux/bios/ldlinux.c32 ${work_dir}/iso/isolinux/ -} - -# Prepare /EFI -make_efi() { - mkdir -p ${work_dir}/iso/EFI/boot - cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/iso/EFI/boot/bootx64.efi - cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/iso/EFI/boot/ - - cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/iso/EFI/boot/loader.efi - - mkdir -p ${work_dir}/iso/loader/entries - cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/iso/loader/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/iso/loader/entries/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/iso/loader/entries/ - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - ${script_path}/efiboot/loader/entries/archiso-x86_64-usb.conf > ${work_dir}/iso/loader/entries/archiso-x86_64.conf - - # EFI Shell 2.0 for UEFI 2.3+ - curl -o ${work_dir}/iso/EFI/shellx64_v2.efi https://raw.githubusercontent.com/tianocore/edk2/master/ShellBinPkg/UefiShell/X64/Shell.efi - # EFI Shell 1.0 for non UEFI 2.3+ - curl -o ${work_dir}/iso/EFI/shellx64_v1.efi https://raw.githubusercontent.com/tianocore/edk2/master/EdkShellBinPkg/FullShell/X64/Shell_Full.efi -} - -# Prepare efiboot.img::/EFI for "El Torito" EFI boot mode -make_efiboot() { - mkdir -p ${work_dir}/iso/EFI/archiso - truncate -s 64M ${work_dir}/iso/EFI/archiso/efiboot.img - mkfs.fat -n ARCHISO_EFI ${work_dir}/iso/EFI/archiso/efiboot.img - - mkdir -p ${work_dir}/efiboot - mount ${work_dir}/iso/EFI/archiso/efiboot.img ${work_dir}/efiboot - - mkdir -p ${work_dir}/efiboot/EFI/archiso - cp ${work_dir}/iso/${install_dir}/boot/x86_64/vmlinuz ${work_dir}/efiboot/EFI/archiso/vmlinuz.efi - cp ${work_dir}/iso/${install_dir}/boot/x86_64/archiso.img ${work_dir}/efiboot/EFI/archiso/archiso.img - - cp ${work_dir}/iso/${install_dir}/boot/intel_ucode.img ${work_dir}/efiboot/EFI/archiso/intel_ucode.img - - mkdir -p ${work_dir}/efiboot/EFI/boot - cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/PreLoader.efi ${work_dir}/efiboot/EFI/boot/bootx64.efi - cp ${work_dir}/x86_64/airootfs/usr/share/efitools/efi/HashTool.efi ${work_dir}/efiboot/EFI/boot/ - - cp ${work_dir}/x86_64/airootfs/usr/lib/systemd/boot/efi/systemd-bootx64.efi ${work_dir}/efiboot/EFI/boot/loader.efi - - mkdir -p ${work_dir}/efiboot/loader/entries - cp ${script_path}/efiboot/loader/loader.conf ${work_dir}/efiboot/loader/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v2-x86_64.conf ${work_dir}/efiboot/loader/entries/ - cp ${script_path}/efiboot/loader/entries/uefi-shell-v1-x86_64.conf ${work_dir}/efiboot/loader/entries/ - - sed "s|%ARCHISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g" \ - ${script_path}/efiboot/loader/entries/archiso-x86_64-cd.conf > ${work_dir}/efiboot/loader/entries/archiso-x86_64.conf - - cp ${work_dir}/iso/EFI/shellx64_v2.efi ${work_dir}/efiboot/EFI/ - cp ${work_dir}/iso/EFI/shellx64_v1.efi ${work_dir}/efiboot/EFI/ - - umount -d ${work_dir}/efiboot -} - -# Build airootfs filesystem image -make_prepare() { - cp -a -l -f ${work_dir}/${arch}/airootfs ${work_dir} - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" pkglist - setarch ${arch} mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" ${gpg_key:+-g ${gpg_key}} prepare - rm -rf ${work_dir}/airootfs - # rm -rf ${work_dir}/${arch}/airootfs (if low space, this helps) -} - -# Build ISO -make_iso() { - mkarchiso ${verbose} -w "${work_dir}" -D "${install_dir}" -L "${iso_label}" -o "${out_dir}" iso "${iso_name}-${iso_version}-x86_64.iso" -} - -if [[ ${EUID} -ne 0 ]]; then - echo "This script must be run as root." - _usage 1 -fi - -if [[ ${arch} != x86_64 ]]; then - echo "This script needs to be run on x86_64" - _usage 1 -fi - -while getopts 'N:V:L:D:w:o:g:vh' arg; do - case "${arg}" in - N) iso_name="${OPTARG}" ;; - V) iso_version="${OPTARG}" ;; - L) iso_label="${OPTARG}" ;; - D) install_dir="${OPTARG}" ;; - w) work_dir="${OPTARG}" ;; - o) out_dir="${OPTARG}" ;; - g) gpg_key="${OPTARG}" ;; - v) verbose="-v" ;; - h) _usage 0 ;; - *) - echo "Invalid argument '${arg}'" - _usage 1 - ;; - esac -done - -mkdir -p ${work_dir} - -run_once make_pacman_conf - -# Do all stuff for each airootfs -for arch in x86_64; do - run_once make_basefs - run_once make_packages -done - -run_once make_packages_efi - -for arch in x86_64; do - run_once make_setup_mkinitcpio - run_once make_customize_airootfs -done - -for arch in x86_64; do - run_once make_boot -done - -# Do all stuff for "iso" -run_once make_boot_extra -run_once make_syslinux -run_once make_isolinux -run_once make_efi -run_once make_efiboot - -for arch in x86_64; do - run_once make_prepare -done - -run_once make_iso diff --git a/efiboot/loader/entries/01-tuxOS-iso-x86_64-linux.conf b/efiboot/loader/entries/01-tuxOS-iso-x86_64-linux.conf new file mode 100644 index 0000000..d64b9dc --- /dev/null +++ b/efiboot/loader/entries/01-tuxOS-iso-x86_64-linux.conf @@ -0,0 +1,7 @@ +title Boot tuxOS (x86_64, UEFI) +sort-key 01 +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +initrd /%INSTALL_DIR%/boot/intel-ucode.img +initrd /%INSTALL_DIR%/boot/amd-ucode.img +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% cow_spacesize=5G copytoram=n module_blacklist=pcspkr,snd_pcsp diff --git a/efiboot/loader/entries/archiso-x86_64-cd.conf b/efiboot/loader/entries/archiso-x86_64-cd.conf deleted file mode 100644 index 9cf2efa..0000000 --- a/efiboot/loader/entries/archiso-x86_64-cd.conf +++ /dev/null @@ -1,5 +0,0 @@ -title Appletneo OS x86_64 UEFI CD -linux /EFI/archiso/vmlinuz.efi -initrd /EFI/archiso/intel_ucode.img -initrd /EFI/archiso/archiso.img -options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/efiboot/loader/entries/archiso-x86_64-usb.conf b/efiboot/loader/entries/archiso-x86_64-usb.conf deleted file mode 100644 index a8bc954..0000000 --- a/efiboot/loader/entries/archiso-x86_64-usb.conf +++ /dev/null @@ -1,5 +0,0 @@ -title Appletneo OS x86_64 UEFI USB -linux /%INSTALL_DIR%/boot/x86_64/vmlinuz -initrd /%INSTALL_DIR%/boot/intel_ucode.img -initrd /%INSTALL_DIR%/boot/x86_64/archiso.img -options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% diff --git a/efiboot/loader/entries/uefi-shell-v1-x86_64.conf b/efiboot/loader/entries/uefi-shell-v1-x86_64.conf deleted file mode 100644 index 9597ff2..0000000 --- a/efiboot/loader/entries/uefi-shell-v1-x86_64.conf +++ /dev/null @@ -1,2 +0,0 @@ -title UEFI Shell x86_64 v1 -efi /EFI/shellx64_v1.efi diff --git a/efiboot/loader/entries/uefi-shell-v2-x86_64.conf b/efiboot/loader/entries/uefi-shell-v2-x86_64.conf deleted file mode 100644 index 0dde77a..0000000 --- a/efiboot/loader/entries/uefi-shell-v2-x86_64.conf +++ /dev/null @@ -1,2 +0,0 @@ -title UEFI Shell x86_64 v2 -efi /EFI/shellx64_v2.efi diff --git a/efiboot/loader/loader.conf b/efiboot/loader/loader.conf index 62c4a83..337a4db 100644 --- a/efiboot/loader/loader.conf +++ b/efiboot/loader/loader.conf @@ -1,2 +1,3 @@ -timeout 3 -default archiso-x86_64 +timeout 15 +default 01-tuxOS-iso-x86_64-linux.conf +beep on diff --git a/grub/grub.cfg b/grub/grub.cfg new file mode 100644 index 0000000..1cf7323 --- /dev/null +++ b/grub/grub.cfg @@ -0,0 +1,81 @@ +# Load partition table and file system modules +insmod part_gpt +insmod part_msdos +insmod fat +insmod iso9660 +insmod ntfs +insmod ntfscomp +insmod exfat +insmod udf + +# Use graphics-mode output +insmod all_video +insmod font +if loadfont "${prefix}/fonts/unicode.pf2" ; then + set gfxmode="auto" + terminal_input console + terminal_output console +fi + +# Enable serial console +if serial --unit=0 --speed=115200; then + terminal_input --append serial + terminal_output --append serial +fi + +# Search for the ISO volume +if [ -z "${ARCHISO_UUID}" ]; then + if [ -z "${ARCHISO_HINT}" ]; then + regexp --set=1:ARCHISO_HINT '^\(([^)]+)\)' "${cmdpath}" + fi + search --no-floppy --set=root --file '%ARCHISO_SEARCH_FILENAME%' --hint "${ARCHISO_HINT}" + probe --set ARCHISO_UUID --fs-uuid "${root}" +fi + +# Set default menu entry +default=tuxOS +timeout=15 +timeout_style=menu + +# GRUB init tune for accessibility +play 600 988 1 1319 4 + +# Menu entries + +menuentry "Boot tuxOS (x86_64, UEFI)" --class arch --class gnu-linux --class gnu --class os --id 'tuxOS' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisodevice=UUID=${ARCHISO_UUID} + initrd /%INSTALL_DIR%/boot/intel-ucode.img /%INSTALL_DIR%/boot/amd-ucode.img /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +} + +if [ "${grub_platform}" == "efi" ]; then + if [ "${grub_cpu}" == "x86_64" ]; then + menuentry "Run Memtest86+ (RAM test)" --class memtest86 --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest.efi + } + menuentry "UEFI Shell" { + insmod chain + chainloader /shellx64.efi + } + elif [ "${grub_cpu}" == "i386" ]; then + menuentry "UEFI Shell" { + insmod chain + chainloader /shellia32.efi + } + fi + + menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' { + fwsetup + } +fi + +menuentry "System shutdown" --class shutdown --class poweroff { + echo "System shutting down..." + halt +} + +menuentry "System restart" --class reboot --class restart { + echo "System rebooting..." + reboot +} diff --git a/isolinux/isolinux.cfg b/isolinux/isolinux.cfg deleted file mode 100644 index 10fd285..0000000 --- a/isolinux/isolinux.cfg +++ /dev/null @@ -1,6 +0,0 @@ -PATH /%INSTALL_DIR%/boot/syslinux/ -DEFAULT loadconfig - -LABEL loadconfig - CONFIG /%INSTALL_DIR%/boot/syslinux/archiso.cfg - APPEND /%INSTALL_DIR%/ diff --git a/mkinitcpio.conf b/mkinitcpio.conf deleted file mode 100644 index d6fa64a..0000000 --- a/mkinitcpio.conf +++ /dev/null @@ -1,2 +0,0 @@ -HOOKS="base udev memdisk archiso_shutdown archiso archiso_loop_mnt archiso_kms block pcmcia filesystems keyboard" -COMPRESSION="xz" diff --git a/packages.both b/packages.both deleted file mode 100644 index 9ae420f..0000000 --- a/packages.both +++ /dev/null @@ -1,157 +0,0 @@ -##xorg-Packages -xorg-fonts -xorg-server -xorg-server-common -xorg-xinit -xorg-xkill -boost -boost-libs -icu -libmtp -xz -xterm - -##System -xf86-video-ati -xf86-video-dummy -xf86-video-fbdev -xf86-video-nouveau -xf86-video-openchrome -xf86-video-vesa -xf86-video-vmware -xf86-video-voodoo -xf86-input-libinput -xf86-input-synaptics -xf86-input-keyboard -xf86-input-vmmouse -xf86-input-mouse -laptop-detect -mlocate -reflector -tracker -linux-headers -broadcom-wl-dkms -lightdm - -##VBox -virtualbox-guest-modules-arch -virtualbox-guest-utils - -##GUI -i3 - -##Themes -numix-gtk-theme -arc-gtk-theme -arc-icon-theme - -##Fonts -ttf-dejavu -ttf-liberation -cantarell-fonts - -##Environment -bash-completion -ncdu -speedtest-cli -pulseaudio -pulseaudio-alsa -pavucontrol -volumeicon -powerline -python - -##Applications -vlc -gparted -leafpad -youtube-dl -p7zip -python-pip -neofetch - -##File-Management -xdg-user-dirs -gvfs -gamin -tumbler - -##System-Packages -arch-install-scripts -b43-fwcutter -btrfs-progs -clonezilla -crda -darkhttpd -ddrescue -dhclient -dialog -dmraid -dnsmasq -dnsutils -dosfstools -elinks -ethtool -exfat-utils -f2fs-tools -fsarchiver -gnu-netcat -gpm -gptfdisk -grml-zsh-config -grub -hdparm -ipw2100-fw -ipw2200-fw -irssi -lftp -linux-atm -lsscsi -mc -mtools -ndisc6 -nfs-utils -nilfs-utils -nmap -ntfs-3g -ntp -openconnect -openssh -openvpn -partclone -parted -partimage -ppp -pptpclient -refind-efi -rfkill -rp-pppoe -rsync -sdparm -sg3_utils -smartmontools -speedtouch -sudo -tcpdump -testdisk -usb_modeswitch -vim-minimal -vpnc -wget -wireless_tools -wpa_actiond -wvdial -xl2tpd -zd1211-firmware -make -m4 -autoconf -automake -binutils -bison -fakeroot -flex -gcc -patch -perl-error -git \ No newline at end of file diff --git a/packages.i686 b/packages.i686 deleted file mode 100644 index e69de29..0000000 diff --git a/packages.x86_64 b/packages.x86_64 index e69de29..3d388dc 100644 --- a/packages.x86_64 +++ b/packages.x86_64 @@ -0,0 +1,267 @@ +# base + +alsa-utils +amd-ucode +arch-install-scripts +archinstall +b43-fwcutter +base +bind +brltty +broadcom-wl +btrfs-progs +clonezilla +cloud-init +cryptsetup +darkhttpd +ddrescue +dhclient +dhcpcd +diffutils +dmidecode +dmraid +dnsmasq +dosfstools +e2fsprogs +edk2-shell +efibootmgr +espeakup +ethtool +exfatprogs +f2fs-tools +fatresize +fsarchiver +gnu-netcat +gpart +gpm +gptfdisk +grub +hdparm +hyperv +intel-ucode +irssi +iw +iwd +jfsutils +kitty-terminfo +less +lftp +libfido2 +libusb-compat +linux +linux-atm +linux-firmware +linux-firmware-marvell +livecd-sounds +lsscsi +lvm2 +lynx +man-db +man-pages +mc +mdadm +memtest86+ +memtest86+-efi +mkinitcpio +mkinitcpio-archiso +mkinitcpio-nfs-utils +modemmanager +mtools +nano +nbd +ndisc6 +nfs-utils +nilfs-utils +nmap +ntfs-3g +nvme-cli +open-iscsi +open-vm-tools +openconnect +openssh +openvpn +partclone +parted +partimage +pcsclite +ppp +pptpclient +pv +qemu-guest-agent +refind +reflector +reiserfsprogs +rp-pppoe +rsync +rxvt-unicode-terminfo +screen +sdparm +sg3_utils +smartmontools +sof-firmware +squashfs-tools +sudo +syslinux +systemd-resolvconf +tcpdump +terminus-font +testdisk +tmux +tpm2-tss +udftools +usb_modeswitch +usbmuxd +usbutils +vim +vpnc +wireless-regdb +wireless_tools +wpa_supplicant +wvdial +xfsprogs +xl2tpd +zsh + +# System +base-devel +xorg +xdg-user-dirs +kitty +networkmanager +network-manager-applet +os-prober +go +nodejs-lts-hydrogen +xdg-desktop-portal + +# tuxOS +tuxos-cursor +tuxos-hooks +tuxos-skel +tuxos-omz +tuxos-nvim +tuxos-bspwm +tuxos-pfetch +tuxos-calamares +tuxos-calamares-config + +# AUR +picom-pijulius-git +ckbcomp +mkinitcpio-openswap + +# WM/UI +sddm +polybar +ttf-firacode-nerd + +# Audio +pipewire +wireplumber +pipewire-alsa +pipewire-pulse +pipewire-jack +pulsemixer +pavucontrol +gst-plugin-pipewire + +# Bluetooth +bluez +bluez-utils +blueman + +# Video +libde265 +libdv +libmpeg2 +schroedinger +libtheora +libvpx +x264 +x265 +xvidcore +gstreamer +ffmpeg +gst-libav +gst-plugins-good +gst-plugins-ugly +gst-plugins-bad + +# Apps +discord +firefox +thunar-archive-plugin +thunar-media-tags-plugin +thunar-volman +file-roller +geany +geany-plugins +viewnior +atril + +# Media +mpc +mpd +ncmpcpp +mplayer + +# Files +gvfs +gvfs-mtp +gvfs-afc +gvfs-gphoto2 +gvfs-smb +gvfs-google +highlight +trash-cli +ueberzug +xdg-user-dirs +xdg-user-dirs-gtk + +# Archives +bzip2 +gzip +lrzip +lz4 +lzip +lzop +xz +zstd +p7zip +zip +unzip +unrar +unarchiver +xarchiver + +# Utils +neofetch +arandr +dunst +nitrogen +picom +python-pywal +feh +ranger +exa +bat +zoxide +starship +neovim +neovide +ripgrep +lazygit +gdu +bottom +rofi +wget +nano +btop + +# VM +virtualbox-guest-utils +qemu-guest-agent +open-vm-tools +xf86-input-vmmouse +xf86-video-vmware + diff --git a/pacman.conf b/pacman.conf index 36714d9..924d9cd 100644 --- a/pacman.conf +++ b/pacman.conf @@ -14,11 +14,11 @@ #CacheDir = /var/cache/pacman/pkg/ #LogFile = /var/log/pacman.log #GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ HoldPkg = pacman glibc -#XferCommand = /usr/bin/curl -C - -f %u > %o +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled -#UseDelta = 0.7 Architecture = auto # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup @@ -31,10 +31,11 @@ Architecture = auto # Misc options #UseSyslog #Color -#TotalDownload +#NoProgressBar # We cannot check disk space from within a chroot environment #CheckSpace #VerbosePkgLists +ParallelDownloads = 5 # By default, pacman accepts packages signed by keys that its local keyring # trusts (see pacman-key and its man page), as well as unsigned packages. @@ -84,5 +85,21 @@ Include = /etc/pacman.d/mirrorlist [community] Include = /etc/pacman.d/mirrorlist -[multilib] -Include = /etc/pacman.d/mirrorlist \ No newline at end of file +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +#[multilib] +#Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs + +[tuxOS] +SigLevel = Optional TrustAll +Server = file:///home/tux/Projects/tuxOS/pkgs/$arch \ No newline at end of file diff --git a/profiledef.sh b/profiledef.sh new file mode 100644 index 0000000..8bbd246 --- /dev/null +++ b/profiledef.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2034 + +iso_name="tuxOS" +iso_label="tuxOS_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)" +iso_publisher="tux " +iso_application="tuxOS Live/Rescue CD" +iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)" +install_dir="arch" +buildmodes=('iso') +bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito' + 'uefi-ia32.grub.esp' 'uefi-x64.grub.esp' +'uefi-ia32.grub.eltorito' 'uefi-x64.grub.eltorito') +arch="x86_64" +pacman_conf="pacman.conf" +airootfs_image_type="squashfs" +airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M') +file_permissions=( + ["/etc/shadow"]="0:0:400" + ["/etc/gshadow"]="0:0:0400" + ["/etc/shadow"]="0:0:400" + ["/root"]="0:0:750" + ["/root/.automated_script.sh"]="0:0:755" + ["/usr/local/bin/choose-mirror"]="0:0:755" + ["/usr/local/bin/Installation_guide"]="0:0:755" + ["/usr/local/bin/livecd-sound"]="0:0:755" +) diff --git a/syslinux/archiso.cfg b/syslinux/archiso.cfg deleted file mode 100644 index 40d8b34..0000000 --- a/syslinux/archiso.cfg +++ /dev/null @@ -1,11 +0,0 @@ -DEFAULT select - -LABEL select -COM32 boot/syslinux/whichsys.c32 -APPEND -pxe- pxe -sys- sys -iso- sys - -LABEL pxe -CONFIG boot/syslinux/archiso_pxe.cfg - -LABEL sys -CONFIG boot/syslinux/archiso_sys.cfg diff --git a/syslinux/archiso_pxe.cfg b/syslinux/archiso_pxe.cfg deleted file mode 100644 index 8d893ce..0000000 --- a/syslinux/archiso_pxe.cfg +++ /dev/null @@ -1,36 +0,0 @@ -INCLUDE boot/syslinux/archiso_head.cfg - -LABEL arch64_nbd -TEXT HELP -Boot the Appletneo OS (x86_64) live medium (Using NBD). -It allows you to install Arch Linux or perform system maintenance. -ENDTEXT -MENU LABEL Boot Appletneo OS (x86_64) (NBD) -LINUX boot/x86_64/vmlinuz -INITRD boot/intel_ucode.img,boot/x86_64/archiso.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver} -SYSAPPEND 3 - -LABEL arch64_nfs -TEXT HELP -Boot the Appletneo OS (x86_64) live medium (Using NFS). -It allows you to install Arch Linux or perform system maintenance. -ENDTEXT -MENU LABEL Boot Appletneo OS (x86_64) (NFS) -LINUX boot/x86_64/vmlinuz -INITRD boot/intel_ucode.img,boot/x86_64/archiso.img -APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt -SYSAPPEND 3 - -LABEL arch64_http -TEXT HELP -Boot the Appletneo OS (x86_64) live medium (Using HTTP). -It allows you to install Arch Linux or perform system maintenance. -ENDTEXT -MENU LABEL Boot Appletneo OS (x86_64) (HTTP) -LINUX boot/x86_64/vmlinuz -INITRD boot/intel_ucode.img,boot/x86_64/archiso.img -APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ -SYSAPPEND 3 - -INCLUDE boot/syslinux/archiso_tail.cfg diff --git a/syslinux/archiso_sys.cfg b/syslinux/archiso_sys.cfg deleted file mode 100644 index a1a2cd6..0000000 --- a/syslinux/archiso_sys.cfg +++ /dev/null @@ -1,13 +0,0 @@ -INCLUDE boot/syslinux/archiso_head.cfg - -LABEL arch64 -TEXT HELP -Boot the Appletneo OS (x86_64) live medium. -It allows you to install Arch Linux or perform system maintenance. -ENDTEXT -MENU LABEL Boot Appletneo OS (x86_64) -LINUX boot/x86_64/vmlinuz -INITRD boot/intel_ucode.img,boot/x86_64/archiso.img -APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% - -INCLUDE boot/syslinux/archiso_tail.cfg diff --git a/syslinux/archiso_tail.cfg b/syslinux/archiso_tail.cfg deleted file mode 100644 index e85d8e1..0000000 --- a/syslinux/archiso_tail.cfg +++ /dev/null @@ -1,27 +0,0 @@ -LABEL existing -TEXT HELP -Boot an existing operating system. -Press TAB to edit the disk and partition number to boot. -ENDTEXT -MENU LABEL Boot existing OS -COM32 boot/syslinux/chain.c32 -APPEND hd0 0 - -# http://www.memtest.org/ -LABEL memtest -MENU LABEL Run Memtest86+ (RAM test) -LINUX boot/memtest - -# http://hdt-project.org/ -LABEL hdt -MENU LABEL Hardware Information (HDT) -COM32 boot/syslinux/hdt.c32 -APPEND modules_alias=boot/syslinux/hdt/modalias.gz pciids=boot/syslinux/hdt/pciids.gz - -LABEL reboot -MENU LABEL Reboot -COM32 boot/syslinux/reboot.c32 - -LABEL poweroff -MENU LABEL Power Off -COM32 boot/syslinux/poweroff.c32 diff --git a/syslinux/splash.png b/syslinux/splash.png index 303fb33cc4e4f0874cc5da340d1550b192b95a55..67dce0a0592c27f091b21e9bfa8668eb4e6415c7 100644 GIT binary patch literal 31295 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