diff --git a/README.md b/README.md index 19dee003a..14851f855 100644 --- a/README.md +++ b/README.md @@ -81,29 +81,6 @@ $ git push 5. Check the repository in UI Open the mono-ui in your browser with `http://localhost:3000`, and you will see the `project` folder. -## Quick Review of Architecture - -![Mega Architect](docs/images/Mega_Bin_and_Modules.png) - -1. **mono** - Mega's api endpoint, responsible for handling `git`, `git-lfs` and web UI requests through the HTTP and SSH protocol. -2. **mega** - The main entry of Mega, parse cli command with clap. -3. **gateway** - The Gateway extend **mono** and contains ztm agent, which is responsible for ztm network capabilities. More information on the [Gateway](gateway/README.md). -4. **libra** - The Libra is a `git` program that rewrite in Rust. More information on the [Libra](libra/README.md). -5. **gemini** - The Gemini is a decentralized module of Mega. More information on the [Gemini](gemini/README.md). -6. **scorpio** - The Scorpio is a FUSE filesystem that allow you to mount a Mega repository as a local filesystem. More information on the [Scorpio](scorpio/README.md). -7. **mercury** - The Mercury module is the core module of Mega, which rewrites Git internal object like Blob, Tree, etc. More information on the [Mercury Module](mercury/README.md). -8. **ceres** - The Ceres is Mega's Monorepo Engine and implement the git transport protocol. More information on the [Ceres](ceres/README.md). -9. **jupiter** - The Jupiter is storage engine for Mega. More information on the [Jupiter](jupiter/README.md). -10. **saturn** - The Saturn module implement user permissions with Cedar policy [Saturn](saturn/README.md). -11. **vault** - The Vault module is used for key and certificate management, implemented with RustyVault -12. **lunar** - The Lunar is a tauri app with Mega. More information on the [Lunar](lunar/README.md). -13. **aries** - The Mega's ztm Relay Server. More information on the [Aries](aries/README.md). -14. **altas** - AI API Module. More information on the [Altas](altas/README.md). -15. **moon** - The Moon is a web UI for Mono Engine. More information on the [Moon](moon/README.md). -16. **mars** - The Mars is website for Mega. More information on the [Mars](mars/README.md). - - - ## Contributing The mega project relies on community contributions and aims to simplify getting started. To develop Mega, clone the repository, then install all dependencies and initialize the database schema, run the test suite and try it out locally. Pick an issue, make changes, and submit a pull request for community review. diff --git a/blackhole/.gitignore b/blackhole/.gitignore new file mode 100644 index 000000000..d01b92335 --- /dev/null +++ b/blackhole/.gitignore @@ -0,0 +1,17 @@ +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +# Build directory +archiso diff --git a/blackhole/README.md b/blackhole/README.md new file mode 100644 index 000000000..9d76c6b18 --- /dev/null +++ b/blackhole/README.md @@ -0,0 +1,38 @@ +# blackhole - Creating a clean build environment for base on Arch Linux + +## How to run blackhole + +1. Install build tools + +```bash +sudo pacman -S archiso +``` + +"Archiso is a highly-customizable tool for building Arch Linux live CD/USB ISO images. The official images are built with Archiso. It can be used as the basis for rescue systems, linux installers or other systems. This wiki article explains how to install Archiso, and how to configure it to control aspects of the resulting ISO image such as included packages and files. Technical requirements and build steps can be found in the official project documentation. Archiso is implemented with a number of bash scripts. The core component of Archiso is the mkarchiso command. Its options are documented in mkarchiso -h and not covered here." - [1] + +2. Create a configuration file directory for the build process + +```bash +cd blackhole +mkdir -p ./archiso +cd ./archiso +cp -r /usr/share/archiso/configs/releng/* . +cp -r ../airootfs ./ +cp ../packages.x86_64 . +sudo mkarchiso -v -w work/ -o out/ . +``` + +* Use kvm to run the built image to install the host system. + + * The configuration that needs to be confirmed is that three virtual disks must be configured. The first disk has a capacity of 20GB and is used for host system installation. The second disk is 30GB and is used as the target disk. The third disk is selected according to the actual situation. Block disk capacity plus memory capacity greater than 35GB + * The installer will run automatically within about 5 minutes after the host image starts. After the installer starts, you need to manually select the install option, and you don’t need to set any options. + * If it does not run automatically or runs incorrectly, execute the command manually: ```archinstall --config user_configuration.json --creds user_credentials.json --disk_layouts user_disk_layout.json``` + * After the installation is complete, you will be prompted whether to enter the chroot environment. Here,  you can choose no and then reboot. + * After the host environment is installed, you need to manually mount the swap partition. + * Host username root password root + +## References + +1. [https://wiki.archlinux.org/title/archiso](https://wiki.archlinux.org/title/archiso) +2. [https://github.com/archlinux/archinstall](https://github.com/archlinux/archinstall) +3. [https://github.com/archlinux/archinstall/wiki/Building-and-Testing](https://github.com/archlinux/archinstall/wiki/Building-and-Testing) diff --git a/blackhole/airootfs/etc/hostname b/blackhole/airootfs/etc/hostname new file mode 100644 index 000000000..2dbe21eb8 --- /dev/null +++ b/blackhole/airootfs/etc/hostname @@ -0,0 +1 @@ +archiso diff --git a/blackhole/airootfs/etc/locale.conf b/blackhole/airootfs/etc/locale.conf new file mode 100644 index 000000000..f9c983cc4 --- /dev/null +++ b/blackhole/airootfs/etc/locale.conf @@ -0,0 +1 @@ +LANG=C.UTF-8 diff --git a/blackhole/airootfs/etc/localtime b/blackhole/airootfs/etc/localtime new file mode 120000 index 000000000..0e35b576b --- /dev/null +++ b/blackhole/airootfs/etc/localtime @@ -0,0 +1 @@ +/usr/share/zoneinfo/UTC \ No newline at end of file diff --git a/blackhole/airootfs/etc/mkinitcpio.conf b/blackhole/airootfs/etc/mkinitcpio.conf new file mode 100644 index 000000000..96a8752da --- /dev/null +++ b/blackhole/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 memdisk archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs 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/blackhole/airootfs/etc/mkinitcpio.d/linux.preset b/blackhole/airootfs/etc/mkinitcpio.d/linux.preset new file mode 100644 index 000000000..9f67184a7 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/modprobe.d/broadcom-wl.conf b/blackhole/airootfs/etc/modprobe.d/broadcom-wl.conf new file mode 100644 index 000000000..0eae70c93 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/motd b/blackhole/airootfs/etc/motd new file mode 100644 index 000000000..4d9eda1ed --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook b/blackhole/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook new file mode 100644 index 000000000..342aa95b4 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook b/blackhole/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook new file mode 100644 index 000000000..8dfb94354 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/passwd b/blackhole/airootfs/etc/passwd new file mode 100644 index 000000000..2807d5d6f --- /dev/null +++ b/blackhole/airootfs/etc/passwd @@ -0,0 +1 @@ +root:x:0:0:root:/root:/usr/bin/zsh diff --git a/blackhole/airootfs/etc/resolv.conf b/blackhole/airootfs/etc/resolv.conf new file mode 120000 index 000000000..36396629d --- /dev/null +++ b/blackhole/airootfs/etc/resolv.conf @@ -0,0 +1 @@ +/run/systemd/resolve/stub-resolv.conf \ No newline at end of file diff --git a/blackhole/airootfs/etc/shadow b/blackhole/airootfs/etc/shadow new file mode 100644 index 000000000..7edfd69be --- /dev/null +++ b/blackhole/airootfs/etc/shadow @@ -0,0 +1 @@ +root::14871:::::: diff --git a/blackhole/airootfs/etc/ssh/sshd_config b/blackhole/airootfs/etc/ssh/sshd_config new file mode 100644 index 000000000..dc22c11c8 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf b/blackhole/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf new file mode 100644 index 000000000..b69850df1 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf @@ -0,0 +1,2 @@ +[Journal] +Storage=volatile diff --git a/blackhole/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf b/blackhole/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf new file mode 100644 index 000000000..f3ecb393f --- /dev/null +++ b/blackhole/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf @@ -0,0 +1,4 @@ +[Login] +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore diff --git a/blackhole/airootfs/etc/systemd/network/20-ethernet.network b/blackhole/airootfs/etc/systemd/network/20-ethernet.network new file mode 100644 index 000000000..9ada77829 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/network/20-wlan.network b/blackhole/airootfs/etc/systemd/network/20-wlan.network new file mode 100644 index 000000000..601d5b8fd --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/network/20-wwan.network b/blackhole/airootfs/etc/systemd/network/20-wwan.network new file mode 100644 index 000000000..9104c243f --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator b/blackhole/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator new file mode 120000 index 000000000..dc1dc0cde --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator @@ -0,0 +1 @@ +/dev/null \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/choose-mirror.service b/blackhole/airootfs/etc/systemd/system/choose-mirror.service new file mode 100644 index 000000000..b6a3562a6 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service b/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service new file mode 120000 index 000000000..ebc50f0c1 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service b/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service new file mode 120000 index 000000000..80fa3c82e --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service b/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service new file mode 120000 index 000000000..dd8e9f1c9 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service b/blackhole/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init.service new file mode 120000 index 000000000..24c7a26f0 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service b/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service new file mode 120000 index 000000000..dcf7c8edc --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service b/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service new file mode 120000 index 000000000..4c158e62e --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service b/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service new file mode 120000 index 000000000..4f6ae342a --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service b/blackhole/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service new file mode 120000 index 000000000..cd004113f --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount b/blackhole/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount new file mode 100644 index 000000000..0ba0e6742 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf b/blackhole/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf new file mode 100644 index 000000000..b9d22eb85 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root - $TERM diff --git a/blackhole/airootfs/etc/systemd/system/livecd-alsa-unmuter.service b/blackhole/airootfs/etc/systemd/system/livecd-alsa-unmuter.service new file mode 100644 index 000000000..03db4b952 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/livecd-alsa-unmuter.service @@ -0,0 +1,13 @@ +[Unit] +Description=Unmute All Sound Card Controls For Use With The Live Arch Environment +# This needs to run after the audio device becomes available. +Wants=systemd-udev-settle.service +After=systemd-udev-settle.service sound.target +ConditionKernelCommandLine=accessibility=on + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/livecd-sound -u + +[Install] +WantedBy=sound.target diff --git a/blackhole/airootfs/etc/systemd/system/livecd-talk.service b/blackhole/airootfs/etc/systemd/system/livecd-talk.service new file mode 100644 index 000000000..b38df22c3 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/livecd-talk.service @@ -0,0 +1,20 @@ +[Unit] +Description=Screen reader service +After=livecd-alsa-unmuter.service +Before=getty@tty1.service +ConditionKernelCommandLine=accessibility=on + +[Service] +Type=oneshot +TTYPath=/dev/tty13 +ExecStartPre=/usr/bin/chvt 13 +ExecStart=/usr/local/bin/livecd-sound -p +ExecStartPost=/usr/bin/chvt 1 +ExecStartPost=systemctl start espeakup.service +StandardInput=tty +TTYVHangup=yes +TTYVTDisallocate=yes +RemainAfterExit=true + +[Install] +WantedBy=multi-user.target diff --git a/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service new file mode 120000 index 000000000..dcf7c8edc --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service new file mode 120000 index 000000000..2d8d256ad --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service new file mode 120000 index 000000000..20ac7b284 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service new file mode 120000 index 000000000..a7eac4a8c --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service new file mode 120000 index 000000000..eae19ef95 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service new file mode 120000 index 000000000..3625abda1 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/iwd.service \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service new file mode 120000 index 000000000..b9174818a --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service @@ -0,0 +1 @@ +/etc/systemd/system/livecd-talk.service \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service new file mode 120000 index 000000000..d09eec68b --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service new file mode 120000 index 000000000..d37272972 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service new file mode 120000 index 000000000..d21ebd9d6 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service new file mode 120000 index 000000000..4c158e62e --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service new file mode 120000 index 000000000..4f6ae342a --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service new file mode 120000 index 000000000..cb2d56043 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service new file mode 120000 index 000000000..e0a11a770 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service b/blackhole/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service new file mode 120000 index 000000000..173f306ca --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service b/blackhole/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service new file mode 120000 index 000000000..7d6ad92c9 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd-wait-online.service \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/pacman-init.service b/blackhole/airootfs/etc/systemd/system/pacman-init.service new file mode 100644 index 000000000..b82488434 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/reflector.service.d/archiso.conf b/blackhole/airootfs/etc/systemd/system/reflector.service.d/archiso.conf new file mode 100644 index 000000000..de6664df0 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket b/blackhole/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket new file mode 120000 index 000000000..51942c8e1 --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.socket \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service b/blackhole/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service new file mode 120000 index 000000000..98c0fc87e --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service @@ -0,0 +1 @@ +../livecd-alsa-unmuter.service \ No newline at end of file diff --git a/blackhole/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service b/blackhole/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service new file mode 120000 index 000000000..cabf28bef --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service b/blackhole/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service new file mode 120000 index 000000000..cd004113f --- /dev/null +++ b/blackhole/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/blackhole/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf b/blackhole/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf new file mode 100644 index 000000000..c9f9bceae --- /dev/null +++ b/blackhole/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf @@ -0,0 +1,6 @@ +# Allow systemd-networkd-wait-online to succeed with one interface, otherwise, if multiple network interfaces exist, +# network-online.target gets needlessly delayed. +# See https://wiki.archlinux.org/title/systemd-networkd#systemd-networkd-wait-online +[Service] +ExecStart= +ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any diff --git a/blackhole/airootfs/etc/xdg/reflector/reflector.conf b/blackhole/airootfs/etc/xdg/reflector/reflector.conf new file mode 100644 index 000000000..7c830d2df --- /dev/null +++ b/blackhole/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/blackhole/airootfs/root/.automated_script.sh b/blackhole/airootfs/root/.automated_script.sh new file mode 100755 index 000000000..52c47e6a0 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/root/.zlogin b/blackhole/airootfs/root/.zlogin new file mode 100644 index 000000000..bf6bc8f6c --- /dev/null +++ b/blackhole/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/blackhole/airootfs/root/.zprofile b/blackhole/airootfs/root/.zprofile new file mode 100644 index 000000000..5efa0e5e0 --- /dev/null +++ b/blackhole/airootfs/root/.zprofile @@ -0,0 +1 @@ +[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && sh -c "archinstall --config user_configuration.json --creds user_credentials.json --disk_layout user_disk_layout.json" diff --git a/blackhole/airootfs/root/user_configuration.json b/blackhole/airootfs/root/user_configuration.json new file mode 100644 index 000000000..09724cadc --- /dev/null +++ b/blackhole/airootfs/root/user_configuration.json @@ -0,0 +1,76 @@ +{ + "additional-repositories": [], + "archinstall-language": "English", + "bootloader": "grub-install", + "config_version": "2.5.1", + "debug": false, + "hostname": "lfs_host", + "harddrives": [ + "/dev/vda", + "/dev/vdb", + "/dev/vdc" + ], + "kernels": [ + "linux" + ], + "keyboard-layout": "us", + "mirror-region": { + "China": { + "http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirror.redrock.team/archlinux/$repo/os/$arch": true, + "http://mirrors.163.com/archlinux/$repo/os/$arch": true, + "http://mirrors.aliyun.com/archlinux/$repo/os/$arch": true, + "http://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.hit.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.nju.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.shanghaitech.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch": true, + "http://mirrors.zju.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirror.redrock.team/archlinux/$repo/os/$arch": true, + "https://mirrors.aliyun.com/archlinux/$repo/os/$arch": true, + "https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.cqu.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.hit.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.nju.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.njupt.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.shanghaitech.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.sjtug.sjtu.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.wsyu.edu.cn/archlinux/$repo/os/$arch": true, + "https://mirrors.xjtu.edu.cn/archlinux/$repo/os/$arch": true + } + }, + "nic": { + "dhcp": true, + "dns": null, + "gateway": null, + "iface": null, + "ip": null, + "type": "iso" + }, + "packages": [ + "openssh", + "vim", + "wget", + "git", + "rust", + "clang", + "parted" + ], + "services": [ + "sshd" + ], + "no_pkg_lookups": false, + "offline": false, + "script": "guided", + "silent": false, + "swap": true, + "timezone": "UTC", + "version": "2.5.1" +} \ No newline at end of file diff --git a/blackhole/airootfs/root/user_credentials.json b/blackhole/airootfs/root/user_credentials.json new file mode 100644 index 000000000..1dab4eef7 --- /dev/null +++ b/blackhole/airootfs/root/user_credentials.json @@ -0,0 +1,5 @@ +{ + "!root-password": "root", + "!encryption-password": null, + "!users": {} +} diff --git a/blackhole/airootfs/root/user_disk_layout.json b/blackhole/airootfs/root/user_disk_layout.json new file mode 100644 index 000000000..3782fc9d8 --- /dev/null +++ b/blackhole/airootfs/root/user_disk_layout.json @@ -0,0 +1,74 @@ +{ + "/dev/vda": { + "partitions": [ + { + "boot": true, + "encrypted": false, + "filesystem": { + "format": "fat32" + }, + "mountpoint": "/boot", + "size": "203MiB", + "start": "3MiB", + "type": "primary", + "wipe": true + }, + { + "encrypted": false, + "filesystem": { + "format": "ext4", + "mount_options": [] + }, + "mountpoint": "/", + "size": "100%", + "start": "206MiB", + "type": "primary", + "wipe": true + } + ], + "wipe": true + }, + "/dev/vdb": { + "partitions": [ + { + "boot": true, + "encrypted": false, + "filesystem": { + "format": "fat32" + }, + "mountpoint": "/mnt/lfs/boot", + "size": "203MiB", + "start": "3MiB", + "type": "primary", + "wipe": true + }, + { + "encrypted": false, + "filesystem": { + "format": "ext4", + "mount_options": [] + }, + "mountpoint": "/mnt/lfs", + "size": "100%", + "start": "206MiB", + "type": "primary", + "wipe": true + } + ], + "wipe": true + }, + "/dev/vdc": { + "partitions": [ + { + "filesystem": { + "format": "ext4" + }, + "mountpoint": null, + "size": "100%", + "start": "512MB", + "type": "primary", + "wipe": true + } + ] + } +} diff --git a/blackhole/airootfs/usr/local/bin/Installation_guide b/blackhole/airootfs/usr/local/bin/Installation_guide new file mode 100755 index 000000000..42667548d --- /dev/null +++ b/blackhole/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/blackhole/airootfs/usr/local/bin/choose-mirror b/blackhole/airootfs/usr/local/bin/choose-mirror new file mode 100755 index 000000000..b021945b9 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/usr/local/bin/livecd-sound b/blackhole/airootfs/usr/local/bin/livecd-sound new file mode 100755 index 000000000..baae0d266 --- /dev/null +++ b/blackhole/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/blackhole/airootfs/usr/local/share/livecd-sound/asound.conf.in b/blackhole/airootfs/usr/local/share/livecd-sound/asound.conf.in new file mode 100644 index 000000000..3f9c7aa0a --- /dev/null +++ b/blackhole/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/blackhole/packages.x86_64 b/blackhole/packages.x86_64 new file mode 100644 index 000000000..a6b299ba9 --- /dev/null +++ b/blackhole/packages.x86_64 @@ -0,0 +1,141 @@ +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 +gpart +gpm +gptfdisk +grml-zsh-config +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 +virtualbox-guest-utils-nox +vpnc +wireless-regdb +wireless_tools +wpa_supplicant +wvdial +xfsprogs +xl2tpd +bash +binutils +bison +coreutils +findutils +gawk +gcc +grep +gzip +m4 +make +patch +perl +sed +tar +texinfo +xz +python3 +wget +zsh