diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..fdd39bde9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '[BUG] ' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Download ISO from '...' +2. Install on '...' +3. Configure '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**System Information:** + - ISO Version: [e.g., 2023.12.01] + - Hardware: [e.g., ThinkPad X1 Carbon] + - BIOS/UEFI Version: [if relevant] + - Installation Method: [e.g., USB boot, VM] + +**Additional context** +Add any other context about the problem here, such as: +- Relevant system logs +- Error messages +- Screenshots diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..8f423a1c8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,26 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '[FEATURE] ' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Implementation details (optional)** +If you have technical knowledge about how this could be implemented: +- Required packages +- Configuration changes +- System modifications + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..c9802fcb3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + # Update for GitHub Actions dependencies + - package-ecosystem: "github-actions" + directory: "/.github/workflows" # Directory for GitHub Actions workflows + schedule: + interval: "daily" # Check for updates daily (previously mentioned as weekly) + time: "08:00" # Run every day at 08:00 UTC, day specification removed as it's redundant + labels: + - "github-actions" + assignees: + - "Githubguy132010" \ No newline at end of file diff --git a/.github/workflows/build-check.yaml b/.github/workflows/build-check.yaml new file mode 100644 index 000000000..abef53c52 --- /dev/null +++ b/.github/workflows/build-check.yaml @@ -0,0 +1,94 @@ +name: Check if ISO can be built + +on: + pull_request: + branches: + - main + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Arch Linux Container + run: | + docker run --privileged --name arch-container -d -v ${{ github.workspace }}:/workdir archlinux:latest sleep infinity + + - name: Build ISO in Arch Container + run: | + docker exec arch-container bash -c " + pacman -Syu --noconfirm && + pacman -S --noconfirm git archiso grub && + cd /workdir && + mkarchiso -v -w workdir/ -o out/ . + " + + - name: Rename ISO to Arch.iso + run: | + docker exec arch-container bash -c " + iso_file=\$(ls /workdir/out/*.iso 2>/dev/null | head -n 1) && + [ -n \"\$iso_file\" ] && mv \$iso_file /workdir/out/Arch.iso || echo 'No ISO file found.' + " + + - name: Copy ISO to Host + run: | + docker cp arch-container:/workdir/out/Arch.iso ${{ github.workspace }}/ || echo 'Failed to copy ISO to host.' + + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV + + - name: Create GitHub Release + id: create_release + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ github.run_id }}-release + release_name: "Arch Linux Release" + body: "Arch Linux ISO built on ${{ steps.date.outputs.date }}" + draft: false + prerelease: false + + - name: Upload ISO to GitHub Release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/Arch.iso + asset_name: Arch.iso + asset_content_type: application/octet-stream + + - name: Delete GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + release_id=$(curl -s \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/releases/tags/v${{ github.run_id }}-release | jq -r .id) && + curl -X DELETE \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/releases/$release_id + + - name: Delete Git Tag + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + curl -X DELETE \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/git/refs/tags/v${{ github.run_id }}-release + + - name: Clean Up + run: | + docker stop arch-container || echo 'Failed to stop the container.' + docker rm arch-container || echo 'Failed to remove the container.' diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 000000000..48be32393 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,78 @@ +name: Build ISO + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' # Run the workflow every day at midnight + +jobs: + build: + runs-on: ubuntu-latest # Use a standard runner + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Arch Linux Container + run: | + docker run --privileged --name arch-container -d -v ${{ github.workspace }}:/workdir archlinux:latest sleep infinity + + - name: Build ISO in Arch Container + run: | + set -e + docker exec arch-container bash -c " + pacman -Syu --noconfirm && + pacman -S --noconfirm git archiso grub && + cd /workdir && + mkarchiso -v -w workdir/ -o out/ . + " + + - name: Rename ISO to Arch.iso + run: | + set -e + docker exec arch-container bash -c " + iso_file=\$(ls /workdir/out/*.iso 2>/dev/null | head -n 1) && + [ -n \"\$iso_file\" ] && mv \$iso_file /workdir/out/Arch.iso || echo 'No ISO file found.' + " + + - name: List ISO files + run: | + docker exec arch-container bash -c "ls -l /workdir/out/" || echo 'Failed to list files.' + + - name: Copy ISO to Host + run: | + docker cp arch-container:/workdir/out/Arch.iso ${{ github.workspace }}/ || echo 'Failed to copy ISO to host.' + + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV + + # Create a release on GitHub using GITHUB_TOKEN + - name: Create GitHub Release + id: create_release # Adding an ID to reference the release step + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ github.run_id }}-release + release_name: "Arch Linux Release" + body: | + This release contains the Arch Linux ISO built on ${{ steps.date.outputs.date }}. + draft: false + prerelease: false + + # Upload the ISO to the GitHub release with a specific, predictable name + - name: Upload ISO to GitHub Release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/Arch.iso + asset_name: Arch.iso + asset_content_type: application/octet-stream + + - name: Clean Up + run: | + docker stop arch-container || echo 'Failed to stop the container.' + docker rm arch-container || echo 'Failed to remove the container.' \ No newline at end of file diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml deleted file mode 100644 index 51f559246..000000000 --- a/.github/workflows/deploy.yaml +++ /dev/null @@ -1,37 +0,0 @@ -name: Deploy to GitHub Pages - -on: - push: - branches: - - website - -jobs: - build-and-deploy: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '16' - - - name: Install dependencies - run: npm install - - - name: Build the project - run: npm run build - - - name: Export the project - run: npm run export - - - name: Deploy to GitHub Pages - run: | - touch out/.nojekyll - git config --global user.name 'github-actions[bot]' - git config --global user.email 'github-actions[bot]@users.noreply.github.com' - git add out - git commit -m 'Deploy to GitHub Pages' - git push origin `git subtree split --prefix out main`:gh-pages --force \ No newline at end of file diff --git a/.github/workflows/dockerfile-check.yaml b/.github/workflows/dockerfile-check.yaml new file mode 100644 index 000000000..ed690462d --- /dev/null +++ b/.github/workflows/dockerfile-check.yaml @@ -0,0 +1,23 @@ +name: Check to make sure Dockerfile works + +on: + pull_request: + branches: [ "main" ] + workflow_dispatch: + schedule: + # Run the workflow on the 1st of every month at midnight + - cron: 0 0 * * * + +jobs: + build: + runs-on: ubuntu-latest # Use a standard runner + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Build and Run Docker container + run: | + set -e # Exit immediately if a command exits with a non-zero status + docker build -t arch-iso-builder . || { echo "Docker build failed"; exit 1; } + docker run --rm --privileged -v "$(pwd)":/workdir arch-iso-builder bash -c "mkarchiso -v -w workdir/ -o out/ ." || { echo "ISO creation failed"; exit 1; } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..9a539f011 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,50 @@ +# Contributing to Arch Linux Without the Beeps + +We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: + +- Reporting a bug +- Discussing the current state of the code +- Submitting a fix +- Proposing new features +- Becoming a maintainer + +## Development Process + +We use GitHub to host code, to track issues and feature requests, as well as accept pull requests. + +1. Fork the repo and create your branch from `main`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code follows the existing style. +6. Issue that pull request! + +## Pull Request Process + +1. Update the README.md with details of changes to the interface, if applicable. +2. Update the version numbers in any examples files and the README.md to the new version. +3. The PR will be merged once you have the sign-off of at least one other developer. + +## Any contributions you make will be under our License +In short, when you submit code changes, your submissions are understood to be under the same [License](LICENSE) that covers the project. Feel free to contact the maintainers if that's a concern. + +## Report bugs using GitHub's [issue tracker](../../issues) +We use GitHub issues to track public bugs. Report a bug by [opening a new issue](../../issues/new). + +## Write bug reports with detail, background, and sample code + +**Great Bug Reports** tend to have: + +- A quick summary and/or background +- Steps to reproduce + - Be specific! + - Give sample code if you can. +- What you expected would happen +- What actually happens +- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) + +## License +By contributing, you agree that your contributions will be licensed under its License. + +## References +This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/a9316a723f9e918afde44dea68b5f9f39b7d9b00/CONTRIBUTING.md). diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f50ecc11f --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Custom Public License (CPL) + +Copyright (c) 2024, Thomas Brugman + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to use, +copy, modify, and distribute the Software, subject to the following conditions: + +1. The Software, and any modifications or derivatives thereof, must remain + open-source and licensed under this same license. + +2. Commercial use, including selling or sublicensing the Software or its + derivatives, is prohibited without explicit written permission from the + copyright holder. + +3. The above copyright notice and this license 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 new file mode 100644 index 000000000..fa1230892 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ + +--- + +# Arch Linux Without the Beeps + +This repository provides a customized Arch Linux ISO with the system beeps disabled, ideal for users who prefer a quieter environment. + +## Features + +- **Silent Mode**: The systemd-boot beep and other annoying beeps are completely disabled. +- **Arch Linux Base**: Built on the latest Arch Linux, providing a clean and minimal system. +- **Custom ISO**: Easily build and download a custom ISO with this configuration. +- **Daily Automated Build**: ISO builds are automatically generated and released daily (if using GitHub Actions). + +--- + +## How to Build the ISO Locally + +If you prefer to build the Arch Linux ISO locally, you can use Docker to set up a containerized environment. Here's how: + +### Prerequisites + +Make sure you have Docker installed on your system. + +### Steps to Build Locally + +1. **Clone the repository**: + + ```bash + git clone https://github.com/Githubguy132010/Arch-Linux-without-the-beeps.git + cd Arch-Linux-without-the-beeps + ``` + +2. **Build the Docker Image**: + + Build the Docker image, which will be used to build the ISO. + + ```bash + docker build -t arch-iso-builder . + ``` + +3. **Build the ISO in the container**: + + Build the ISO with this command: + + ```bash + docker run --rm --privileged -v $(pwd):/workdir arch-iso-builder bash -c "mkarchiso -v -w workdir/ -o out/ ." + ``` + +4. **Retrieve the ISO**: + + Once the process completes, the ISO will be available in the `out/` directory within your local folder as `Arch.iso`. + + +## How to Use GitHub Actions (Automated Workflow) + +This repository also includes a GitHub Actions workflow for building and releasing the ISO automatically on GitHub. + +### How It Works: + +1. **Automated Workflow**: The workflow is triggered by: + - **A manual run** + - **Scheduled daily builds** at midnight (UTC) + +2. **Download the ISO**: + - Visit the [releases page](https://github.com/Githubguy132010/Arch-Linux-without-the-beeps/releases) to download the latest ISO. + +### GitHub Actions Workflow Overview + +The GitHub Actions workflow automatically builds and releases the ISO. Here’s a quick overview: + +1. **Checkout Repository**: Pulls the latest files from the repository. +2. **Build Environment Setup**: A Docker container simulates the Arch Linux environment. +3. **Build ISO**: The Arch ISO is customized and built using `mkarchiso`. +4. **Upload ISO**: The ISO is uploaded as a release on GitHub with a version tag. +5. **Silent Configuration**: Ensures that system beeps are turned off across all configurations. + +### How to Trigger the GitHub Workflow + +1. **Run the workflow**: + You can run the workflow by going to **Actions > Build ISO** and clicking on **Run Workflow**. + + +--- + +## License + +This project is licensed under my custom license - see the [LICENSE](LICENSE) file for details. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..e4b6ece7d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,49 @@ +# Security Policy + +## Supported Versions + +This project provides ISO builds of Arch Linux. We maintain and provide security updates for: + +| Version | Supported | +| ------- | ------------------ | +| Latest Release | :white_check_mark: | +| Older Releases | :x: | + +## Reporting a Vulnerability + +We take the security of this project seriously. If you believe you have found a security vulnerability, please follow these steps: + +1. **Do Not** open a public issue on GitHub +2. Send a description of the vulnerability to [project maintainer's email] +3. Include the following information: + - Type of issue + - Full paths of source file(s) related to the issue + - The location of the affected source code + - Any special configuration required to reproduce the issue + - Step-by-step instructions to reproduce the issue + - Proof-of-concept or exploit code (if possible) + - Impact of the issue, including how an attacker might exploit it + +## Security Measures + +Our ISO builds implement several security measures: + +1. **Verification**: All ISOs are provided with SHA256 checksums +2. **Updates**: The ISO is rebuilt daily with the latest security updates +3. **Minimal Surface**: Only essential packages are included +4. **Docker Security**: The build process runs in an isolated container + +## Best Practices + +When using this ISO: + +1. Always verify the ISO checksum before installation +2. Keep your system updated regularly +3. Follow Arch Linux security guidelines +4. Implement appropriate system hardening measures + +## Security Updates + +- Security updates are handled through the standard Arch Linux package management system +- Critical security issues will be addressed as soon as possible +- Updates that affect the ISO build process will trigger a new build automatically diff --git a/airootfs/etc/hostname b/airootfs/etc/hostname new file mode 100644 index 000000000..2dbe21eb8 --- /dev/null +++ b/airootfs/etc/hostname @@ -0,0 +1 @@ +archiso diff --git a/airootfs/etc/locale.conf b/airootfs/etc/locale.conf new file mode 100644 index 000000000..f9c983cc4 --- /dev/null +++ b/airootfs/etc/locale.conf @@ -0,0 +1 @@ +LANG=C.UTF-8 diff --git a/airootfs/etc/localtime b/airootfs/etc/localtime new file mode 120000 index 000000000..0e35b576b --- /dev/null +++ b/airootfs/etc/localtime @@ -0,0 +1 @@ +/usr/share/zoneinfo/UTC \ No newline at end of file diff --git a/airootfs/etc/mkinitcpio.conf.d/archiso.conf b/airootfs/etc/mkinitcpio.conf.d/archiso.conf new file mode 100644 index 000000000..5c008e51f --- /dev/null +++ b/airootfs/etc/mkinitcpio.conf.d/archiso.conf @@ -0,0 +1,3 @@ +HOOKS=(base udev microcode modconf kms memdisk archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard) +COMPRESSION="xz" +COMPRESSION_OPTIONS=(-9e) diff --git a/airootfs/etc/mkinitcpio.d/linux.preset b/airootfs/etc/mkinitcpio.d/linux.preset new file mode 100644 index 000000000..8e852051c --- /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' +archiso_config='/etc/mkinitcpio.conf.d/archiso.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 000000000..0eae70c93 --- /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 000000000..4d9eda1ed --- /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 000000000..342aa95b4 --- /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 000000000..8dfb94354 --- /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 000000000..2807d5d6f --- /dev/null +++ b/airootfs/etc/passwd @@ -0,0 +1 @@ +root:x:0:0:root:/root:/usr/bin/zsh diff --git a/airootfs/etc/resolv.conf b/airootfs/etc/resolv.conf new file mode 120000 index 000000000..36396629d --- /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 000000000..7edfd69be --- /dev/null +++ b/airootfs/etc/shadow @@ -0,0 +1 @@ +root::14871:::::: diff --git a/airootfs/etc/ssh/sshd_config.d/10-archiso.conf b/airootfs/etc/ssh/sshd_config.d/10-archiso.conf new file mode 100644 index 000000000..6ea7b41a4 --- /dev/null +++ b/airootfs/etc/ssh/sshd_config.d/10-archiso.conf @@ -0,0 +1,3 @@ +# Allow root login using password authentication +PasswordAuthentication yes +PermitRootLogin yes 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 000000000..b69850df1 --- /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/do-not-suspend.conf b/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf new file mode 100644 index 000000000..f3ecb393f --- /dev/null +++ b/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf @@ -0,0 +1,4 @@ +[Login] +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore diff --git a/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf b/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf new file mode 100644 index 000000000..0e9ceb4e8 --- /dev/null +++ b/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf @@ -0,0 +1,2 @@ +[Network] +IPv6PrivacyExtensions=yes diff --git a/airootfs/etc/systemd/network/20-ethernet.network b/airootfs/etc/systemd/network/20-ethernet.network new file mode 100644 index 000000000..d3a327198 --- /dev/null +++ b/airootfs/etc/systemd/network/20-ethernet.network @@ -0,0 +1,24 @@ +[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* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=yes +MulticastDNS=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 000000000..8b70a95f8 --- /dev/null +++ b/airootfs/etc/systemd/network/20-wlan.network @@ -0,0 +1,20 @@ +[Match] +Name=wl* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=yes +MulticastDNS=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 000000000..6e1c8dda4 --- /dev/null +++ b/airootfs/etc/systemd/network/20-wwan.network @@ -0,0 +1,19 @@ +[Match] +Name=ww* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=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/resolved.conf.d/archiso.conf b/airootfs/etc/systemd/resolved.conf.d/archiso.conf new file mode 100644 index 000000000..636f3bd64 --- /dev/null +++ b/airootfs/etc/systemd/resolved.conf.d/archiso.conf @@ -0,0 +1,4 @@ +# Default systemd-resolved configuration for archiso + +[Resolve] +MulticastDNS=yes 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 000000000..dc1dc0cde --- /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/choose-mirror.service b/airootfs/etc/systemd/system/choose-mirror.service new file mode 100644 index 000000000..b6a3562a6 --- /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 000000000..ebc50f0c1 --- /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 000000000..80fa3c82e --- /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 000000000..dd8e9f1c9 --- /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 000000000..24c7a26f0 --- /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.freedesktop.ModemManager1.service b/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service new file mode 120000 index 000000000..dcf7c8edc --- /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 000000000..4c158e62e --- /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 000000000..4f6ae342a --- /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 000000000..cd004113f --- /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/etc-pacman.d-gnupg.mount b/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount new file mode 100644 index 000000000..038961e41 --- /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=tmpfs +Where=/etc/pacman.d/gnupg +Type=tmpfs +Options=mode=0755,noswap diff --git a/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf b/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf new file mode 100644 index 000000000..b9d22eb85 --- /dev/null +++ b/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/airootfs/etc/systemd/system/livecd-alsa-unmuter.service b/airootfs/etc/systemd/system/livecd-alsa-unmuter.service new file mode 100644 index 000000000..03db4b952 --- /dev/null +++ b/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/airootfs/etc/systemd/system/livecd-talk.service b/airootfs/etc/systemd/system/livecd-talk.service new file mode 100644 index 000000000..b38df22c3 --- /dev/null +++ b/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/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 000000000..dcf7c8edc --- /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/choose-mirror.service b/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service new file mode 120000 index 000000000..2d8d256ad --- /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 000000000..20ac7b284 --- /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 000000000..a7eac4a8c --- /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 000000000..eae19ef95 --- /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/iwd.service b/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service new file mode 120000 index 000000000..3625abda1 --- /dev/null +++ b/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/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service b/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service new file mode 120000 index 000000000..b9174818a --- /dev/null +++ b/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/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 000000000..d09eec68b --- /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 000000000..d37272972 --- /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 000000000..d21ebd9d6 --- /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-networkd.service b/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service new file mode 120000 index 000000000..4c158e62e --- /dev/null +++ b/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/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 000000000..4f6ae342a --- /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 000000000..cb2d56043 --- /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 000000000..e0a11a770 --- /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 000000000..173f306ca --- /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/network-online.target.wants/systemd-networkd-wait-online.service b/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service new file mode 120000 index 000000000..7d6ad92c9 --- /dev/null +++ b/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/airootfs/etc/systemd/system/pacman-init.service b/airootfs/etc/systemd/system/pacman-init.service new file mode 100644 index 000000000..b82488434 --- /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 000000000..de6664df0 --- /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/sockets.target.wants/pcscd.socket b/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket new file mode 120000 index 000000000..3897c638d --- /dev/null +++ b/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/pcscd.socket \ No newline at end of file diff --git a/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket b/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket new file mode 120000 index 000000000..51942c8e1 --- /dev/null +++ b/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/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service b/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service new file mode 120000 index 000000000..98c0fc87e --- /dev/null +++ b/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/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 000000000..cabf28bef --- /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 000000000..cd004113f --- /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/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf b/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/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/airootfs/etc/xdg/reflector/reflector.conf b/airootfs/etc/xdg/reflector/reflector.conf new file mode 100644 index 000000000..7c830d2df --- /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 000000000..f7f3ced2b --- /dev/null +++ b/airootfs/root/.automated_script.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +script_cmdline() { + local param + for param in $(/etc/pacman.d/mirrorlist < +# $2 +# $3 +unmute_and_set_level() { + [[ -n "$3" && -n "$2" && -n "$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() { + [[ -n "$1" && -n "$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() { + [[ -n "$3" && -n "$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" /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 == 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 (( $# == 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 000000000..3f9c7aa0a --- /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/app/about/page.tsx b/app/about/page.tsx deleted file mode 100644 index 71c4352ef..000000000 --- a/app/about/page.tsx +++ /dev/null @@ -1,29 +0,0 @@ - -export default function AboutPage() { - return ( -
-

- About Arch Linux without Beeps -

-
-

- This project was created to help users install Arch Linux without the annoying beeps that can occur during the installation process. It aims to provide a smoother and more pleasant installation experience. -

-

About the Author

-
-
-

Thomas Brugman

-

Developer & Linux Enthusiast

-
-
-

- Hi, I'm Thomas Brugman. I live in Gouda (Netherlands) and have a keen interest in computers and laptops. I enjoy testing new operating systems and reporting bugs. I'm currently learning YAML and Bash, and I already have some experience with both. I use VS Code as my development environment and am familiar with some fundamental programming concepts. -

-

- I'm working on the 'Arch-Linux-without-the-beeps' project, which ensures that the system does not produce beep sounds during installation and builds ISO files locally using Docker. I prefer using sudo in scripts and am open to feedback and new features for my project. -

-
-
- ) -} - diff --git a/bootstrap_packages.x86_64 b/bootstrap_packages.x86_64 new file mode 100644 index 000000000..64966d076 --- /dev/null +++ b/bootstrap_packages.x86_64 @@ -0,0 +1,2 @@ +arch-install-scripts +base diff --git a/components/Navbar.tsx b/components/Navbar.tsx deleted file mode 100644 index 9b32a5023..000000000 --- a/components/Navbar.tsx +++ /dev/null @@ -1,72 +0,0 @@ -'use client' - -import { useState, useEffect } from 'react' -import Link from 'next/link' -import { usePathname } from 'next/navigation' -import { Moon, Sun } from 'lucide-react' - -const Navbar = () => { - const [darkMode, setDarkMode] = useState(false) - const [isScrolled, setIsScrolled] = useState(false) - const pathname = usePathname() - - useEffect(() => { - const isDarkMode = localStorage.getItem('darkMode') === 'true' - setDarkMode(isDarkMode) - }, []) - - useEffect(() => { - const handleScroll = () => { - setIsScrolled(window.scrollY > 20) - } - window.addEventListener('scroll', handleScroll) - return () => window.removeEventListener('scroll', handleScroll) - }, []) - - useEffect(() => { - if (darkMode) { - document.documentElement.classList.add('dark') - localStorage.setItem('darkMode', 'true') - } else { - document.documentElement.classList.remove('dark') - localStorage.setItem('darkMode', 'false') - } - }, [darkMode]) - - const navItems = [ - { name: 'Home', path: '/' }, - { name: 'Download', path: '/download' }, - { name: 'Docs', path: '/docs' }, - { name: 'About', path: '/about' }, - ] - - return ( -
- -
- ) -} - -export default Navbar \ No newline at end of file diff --git a/dockerfile b/dockerfile new file mode 100644 index 000000000..9deedfead --- /dev/null +++ b/dockerfile @@ -0,0 +1,15 @@ +FROM archlinux:latest + +# Install necessary packages +RUN pacman -Syu --noconfirm && \ + pacman -S --noconfirm git archiso grub + +# Set the working directory +WORKDIR /workdir + +# Copy files into the container +COPY . . + +# Instead of running mkarchiso here, we leave it for later execution +# Create an entrypoint or leave it to manual execution +CMD ["/bin/bash"] diff --git a/docs/page.tsx b/docs/page.tsx deleted file mode 100644 index 5556141b9..000000000 --- a/docs/page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import Link from 'next/link' - -export default function DocsPage() { - return ( -
-

- Documentation -

-
-

Installation Guide

-
    -
  1. - Download the ISO: Get the latest Arch Linux without Beeps ISO from our{' '} - download page. -
  2. -
  3. - Create a bootable USB drive: Use a tool like Rufus or dd to create a bootable USB drive with the downloaded ISO. -
  4. -
  5. - Boot from the USB drive: Restart your computer and boot from the USB drive. You may need to change your BIOS/UEFI settings to do this. -
  6. -
  7. - Follow the Arch Linux installation guide: Our ISO follows the standard Arch Linux installation process, but without the system beeps. Refer to the{' '} - - official Arch Linux installation guide - {' '} - for detailed steps. -
  8. -
  9. - Enjoy your beep-free Arch Linux: Once installed, you'll have a fully functional Arch Linux system without the annoying beeps during boot or system events. -
  10. -
-

Troubleshooting

-

- If you encounter any issues during installation or have questions, please check our{' '} - - GitHub Issues - {' '} - page or create a new issue for support. -

-
-
- ) -} - diff --git a/downloads/page.tsx b/downloads/page.tsx deleted file mode 100644 index 7c8dca563..000000000 --- a/downloads/page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import Link from 'next/link' -import { Download } from 'lucide-react' - -export default function DownloadPage() { - return ( -
-

- Download Arch Linux without Beeps -

-
-

- Get the latest version of Arch Linux installation files without the annoying system beeps. Our custom ISO ensures a smooth and quiet installation process. -

-
- - - Download Latest Release - -
-
-

System Requirements:

-
    -
  • x86_64 architecture
  • -
  • Minimum 512 MB RAM (2 GB recommended)
  • -
  • Minimum 2 GB disk space (20 GB recommended)
  • -
  • Internet connection for installation
  • -
-
-
-
- ) -} - diff --git a/efiboot/loader/entries/01-archiso-x86_64-linux.conf b/efiboot/loader/entries/01-archiso-x86_64-linux.conf new file mode 100644 index 000000000..bc8ab3360 --- /dev/null +++ b/efiboot/loader/entries/01-archiso-x86_64-linux.conf @@ -0,0 +1,5 @@ +title Arch Linux install medium (x86_64, UEFI) +sort-key 01 +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +options archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% diff --git a/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf b/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf new file mode 100644 index 000000000..c0cb1c88f --- /dev/null +++ b/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf @@ -0,0 +1,5 @@ +title Arch Linux install medium (x86_64, UEFI) with speech +sort-key 02 +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +options archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on diff --git a/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf b/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf new file mode 100644 index 000000000..d0b305c9d --- /dev/null +++ b/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf @@ -0,0 +1,3 @@ +title Memtest86+ +sort-key 03 +efi /boot/memtest86+/memtest.efi diff --git a/efiboot/loader/loader.conf b/efiboot/loader/loader.conf new file mode 100644 index 000000000..a67444178 --- /dev/null +++ b/efiboot/loader/loader.conf @@ -0,0 +1,3 @@ +timeout 30 +default 01-archiso-x86_64-linux.conf +beep off diff --git a/globals.css b/globals.css deleted file mode 100644 index c7d3222bb..000000000 --- a/globals.css +++ /dev/null @@ -1,79 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - --background: 218 27% 94%; - --foreground: 220 16% 22%; - --card: 220 14% 96%; - --card-foreground: 220 16% 22%; - --popover: 220 14% 96%; - --popover-foreground: 220 16% 22%; - --primary: 220 54% 20%; - --primary-foreground: 220 14% 96%; - --secondary: 220 14% 90%; - --secondary-foreground: 220 16% 22%; - --muted: 220 14% 90%; - --muted-foreground: 220 10% 40%; - --accent: 220 14% 90%; - --accent-foreground: 220 16% 22%; - --destructive: 0 84% 60%; - --destructive-foreground: 210 20% 98%; - --border: 220 13% 91%; - --input: 220 13% 91%; - --ring: 220 54% 20%; - --radius: 0.5rem; -} - -.dark { - --background: 220 16% 22%; - --foreground: 220 14% 96%; - --card: 220 16% 26%; - --card-foreground: 220 14% 96%; - --popover: 220 16% 26%; - --popover-foreground: 220 14% 96%; - --primary: 220 54% 70%; - --primary-foreground: 220 16% 22%; - --secondary: 220 16% 28%; - --secondary-foreground: 220 14% 96%; - --muted: 220 16% 28%; - --muted-foreground: 220 14% 80%; - --accent: 220 16% 28%; - --accent-foreground: 220 14% 96%; - --destructive: 0 62% 30%; - --destructive-foreground: 210 20% 98%; - --border: 220 16% 28%; - --input: 220 16% 28%; - --ring: 220 54% 70%; -} - -body { - @apply bg-background text-foreground; -} - -@layer base { - * { - @apply border-border; - } - body { - @apply bg-background text-foreground; - } -} - -@layer utilities { - .transition-all { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; - } -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -.animate-fade-in { - animation: fadeIn 0.5s ease-in-out; -} - diff --git a/grub/grub.cfg b/grub/grub.cfg new file mode 100644 index 000000000..25194a36f --- /dev/null +++ b/grub/grub.cfg @@ -0,0 +1,107 @@ +# 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 +if loadfont "${prefix}/fonts/unicode.pf2" ; then + insmod all_video + set gfxmode="auto" + terminal_input console + terminal_output console +fi + +# Enable serial console +insmod serial +insmod usbserial_common +insmod usbserial_ftdi +insmod usbserial_pl2303 +insmod usbserial_usbdebug +if serial --unit=0 --speed=115200; then + terminal_input --append serial + terminal_output --append serial +fi + +# Get a human readable platform identifier +if [ "${grub_platform}" == 'efi' ]; then + archiso_platform='UEFI' + if [ "${grub_cpu}" == 'x86_64' ]; then + archiso_platform="x64 ${archiso_platform}" + elif [ "${grub_cpu}" == 'i386' ]; then + archiso_platform="IA32 ${archiso_platform}" + else + archiso_platform="${grub_cpu} ${archiso_platform}" + fi +elif [ "${grub_platform}" == 'pc' ]; then + archiso_platform='BIOS' +else + archiso_platform="${grub_cpu} ${grub_platform}" +fi + +# Set default menu entry +default=archlinux +timeout=15 +timeout_style=menu + + +# Menu entries + +menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + +menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + + +if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest.efi + } +fi +if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest + } +fi +if [ "${grub_platform}" == 'efi' ]; then + if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellx64.efi + } + elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then + menuentry 'UEFI Shell' --class efi { + 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 +} + + +# GRUB init tune for accessibility +play 600 988 1 1319 4 diff --git a/grub/loopback.cfg b/grub/loopback.cfg new file mode 100644 index 000000000..d7d5ecedf --- /dev/null +++ b/grub/loopback.cfg @@ -0,0 +1,80 @@ +# https://www.supergrubdisk.org/wiki/Loopback.cfg + +# Search for the ISO volume +search --no-floppy --set=archiso_img_dev --file "${iso_path}" +probe --set archiso_img_dev_uuid --fs-uuid "${archiso_img_dev}" + +# Get a human readable platform identifier +if [ "${grub_platform}" == 'efi' ]; then + archiso_platform='UEFI' + if [ "${grub_cpu}" == 'x86_64' ]; then + archiso_platform="x64 ${archiso_platform}" + elif [ "${grub_cpu}" == 'i386' ]; then + archiso_platform="IA32 ${archiso_platform}" + else + archiso_platform="${grub_cpu} ${archiso_platform}" + fi +elif [ "${grub_platform}" == 'pc' ]; then + archiso_platform='BIOS' +else + archiso_platform="${grub_cpu} ${grub_platform}" +fi + +# Set default menu entry +default=archlinux +timeout=15 +timeout_style=menu + + +# Menu entries + +menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + +menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" accessibility=on + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + + +if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest.efi + } +fi +if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest + } +fi +if [ "${grub_platform}" == 'efi' ]; then + if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellx64.efi + } + elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then + menuentry 'UEFI Shell' --class efi { + 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/layout.tsx b/layout.tsx deleted file mode 100644 index e046b3732..000000000 --- a/layout.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { Metadata } from 'next' -import { Inter } from 'next/font/google' -import './globals.css' -import Navbar from '@/components/Navbar' - -const inter = Inter({ subsets: ['latin'] }) - -export const metadata: Metadata = { - title: 'Arch Linux without Beeps', - description: 'Install Arch Linux without the annoying beeps', -} - -export default function RootLayout({ - children, -}: { - children: React.ReactNode -}) { - return ( - - - -
{children}
- - - ) -} - diff --git a/packages.x86_64 b/packages.x86_64 new file mode 100644 index 000000000..1e9a752e1 --- /dev/null +++ b/packages.x86_64 @@ -0,0 +1,128 @@ +alsa-utils +amd-ucode +arch-install-scripts +archinstall +b43-fwcutter +base +bcachefs-tools +bind +bolt +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 +foot-terminfo +fsarchiver +gpart +gpm +gptfdisk +grml-zsh-config +grub +hdparm +hyperv +intel-ucode +irssi +iw +iwd +jfsutils +kitty-terminfo +ldns +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 +openpgp-card-tools +openssh +openvpn +partclone +parted +partimage +pcsclite +ppp +pptpclient +pv +qemu-guest-agent +refind +reflector +rp-pppoe +rsync +rxvt-unicode-terminfo +screen +sdparm +sequoia-sq +sg3_utils +smartmontools +sof-firmware +squashfs-tools +sudo +syslinux +systemd-resolvconf +tcpdump +terminus-font +testdisk +tmux +tpm2-tools +tpm2-tss +udftools +usb_modeswitch +usbmuxd +usbutils +vim +virtualbox-guest-utils-nox +vpnc +wireless-regdb +wireless_tools +wpa_supplicant +wvdial +xfsprogs +xl2tpd +zsh diff --git a/pacman.conf b/pacman.conf new file mode 100644 index 000000000..2c5a344ae --- /dev/null +++ b/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#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 -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +#NoProgressBar +# We cannot check disk space from within a chroot environment +#CheckSpace +#VerbosePkgLists +ParallelDownloads = 64 +DownloadUser = alpm +#DisableSandbox + +# 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. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[core-testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +# 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 diff --git a/page.tsx b/page.tsx deleted file mode 100644 index af10531f1..000000000 --- a/page.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import Link from 'next/link' - -export default function Home() { - return ( -
-

- Welcome to Arch Linux without Beeps -

-

- Experience a streamlined Arch Linux installation without the annoying system beeps. -

-
- - Download Now - - - View Docs - -
-
- ) -} - diff --git a/profiledef.sh b/profiledef.sh new file mode 100644 index 000000000..ce26e793d --- /dev/null +++ b/profiledef.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2034 + +iso_name="archlinux" +iso_label="ARCH_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)" +iso_publisher="Arch Linux " +iso_application="Arch Linux Live/Rescue DVD" +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.systemd-boot.esp' 'uefi-x64.systemd-boot.esp' + 'uefi-ia32.systemd-boot.eltorito' 'uefi-x64.systemd-boot.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') +bootstrap_tarball_compression=('zstd' '-c' '-T0' '--auto-threads=logical' '--long' '-19') +file_permissions=( + ["/etc/shadow"]="0:0:400" + ["/root"]="0:0:750" + ["/root/.automated_script.sh"]="0:0:755" + ["/root/.gnupg"]="0:0:700" + ["/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_head.cfg b/syslinux/archiso_head.cfg new file mode 100644 index 000000000..671ab4e78 --- /dev/null +++ b/syslinux/archiso_head.cfg @@ -0,0 +1,28 @@ +SERIAL 0 115200 +UI vesamenu.c32 +MENU TITLE Arch Linux +MENU BACKGROUND splash.png + +MENU WIDTH 78 +MENU MARGIN 4 +MENU ROWS 7 +MENU VSHIFT 10 +MENU TABMSGROW 14 +MENU CMDLINEROW 14 +MENU HELPMSGROW 16 +MENU HELPMSGENDROW 29 + +# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 + +MENU COLOR border 30;44 #40ffffff #a0000000 std +MENU COLOR title 1;36;44 #9033ccff #a0000000 std +MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all +MENU COLOR unsel 37;44 #50ffffff #a0000000 std +MENU COLOR help 37;40 #c0ffffff #a0000000 std +MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std +MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std +MENU COLOR msg07 37;40 #90ffffff #a0000000 std +MENU COLOR tabmsg 31;40 #30ffffff #00000000 std + +MENU CLEAR +MENU IMMEDIATE diff --git a/syslinux/archiso_pxe-linux.cfg b/syslinux/archiso_pxe-linux.cfg new file mode 100644 index 000000000..5d0f7414e --- /dev/null +++ b/syslinux/archiso_pxe-linux.cfg @@ -0,0 +1,32 @@ +LABEL arch64_nbd +TEXT HELP +Boot the Arch Linux install medium using NBD. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, NBD) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% archiso_nbd_srv=${pxeserver} cms_verify=y +SYSAPPEND 3 + +LABEL arch64_nfs +TEXT HELP +Boot the Arch Linux live medium using NFS. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, NFS) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt cms_verify=y +SYSAPPEND 3 + +LABEL arch64_http +TEXT HELP +Boot the Arch Linux live medium using HTTP. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, HTTP) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ cms_verify=y +SYSAPPEND 3 diff --git a/syslinux/archiso_pxe.cfg b/syslinux/archiso_pxe.cfg new file mode 100644 index 000000000..b4c9a804e --- /dev/null +++ b/syslinux/archiso_pxe.cfg @@ -0,0 +1,5 @@ +INCLUDE archiso_head.cfg + +INCLUDE archiso_pxe-linux.cfg + +INCLUDE archiso_tail.cfg diff --git a/syslinux/archiso_sys-linux.cfg b/syslinux/archiso_sys-linux.cfg new file mode 100644 index 000000000..919e15876 --- /dev/null +++ b/syslinux/archiso_sys-linux.cfg @@ -0,0 +1,20 @@ +LABEL arch64 +TEXT HELP +Boot the Arch Linux install medium on BIOS. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, BIOS) +LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% + +# Accessibility boot option +LABEL arch64speech +TEXT HELP +Boot the Arch Linux install medium on BIOS with speakup screen reader. +It allows you to install Arch Linux or perform system maintenance with speech feedback. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, BIOS) with ^speech +LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on diff --git a/syslinux/archiso_sys.cfg b/syslinux/archiso_sys.cfg new file mode 100644 index 000000000..d93bcfe67 --- /dev/null +++ b/syslinux/archiso_sys.cfg @@ -0,0 +1,8 @@ +INCLUDE archiso_head.cfg + +DEFAULT arch64 +TIMEOUT 150 + +INCLUDE archiso_sys-linux.cfg + +INCLUDE archiso_tail.cfg diff --git a/syslinux/archiso_tail.cfg b/syslinux/archiso_tail.cfg new file mode 100644 index 000000000..e84897c5a --- /dev/null +++ b/syslinux/archiso_tail.cfg @@ -0,0 +1,35 @@ +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 chain.c32 +APPEND hd0 0 + +# https://www.memtest.org/ +LABEL memtest +MENU LABEL Run Memtest86+ (RAM test) +LINUX /boot/memtest86+/memtest + +# https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) +LABEL hdt +MENU LABEL Hardware Information (HDT) +COM32 hdt.c32 +APPEND modules_alias=hdt/modalias.gz pciids=hdt/pciids.gz + +LABEL reboot +TEXT HELP +Reboot computer. +The computer's firmware must support APM. +ENDTEXT +MENU LABEL Reboot +COM32 reboot.c32 + +LABEL poweroff +TEXT HELP +Power off computer. +The computer's firmware must support APM. +ENDTEXT +MENU LABEL Power Off +COM32 poweroff.c32 diff --git a/syslinux/splash.png b/syslinux/splash.png new file mode 100644 index 000000000..64b959a61 Binary files /dev/null and b/syslinux/splash.png differ diff --git a/syslinux/syslinux.cfg b/syslinux/syslinux.cfg new file mode 100644 index 000000000..cbda72f2a --- /dev/null +++ b/syslinux/syslinux.cfg @@ -0,0 +1,11 @@ +DEFAULT select + +LABEL select +COM32 whichsys.c32 +APPEND -pxe- pxe -sys- sys -iso- sys + +LABEL pxe +CONFIG archiso_pxe.cfg + +LABEL sys +CONFIG archiso_sys.cfg diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index f1b1a8a39..000000000 --- a/tailwind.config.js +++ /dev/null @@ -1,78 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - darkMode: ["class"], - content: [ - './pages/**/*.{ts,tsx}', - './components/**/*.{ts,tsx}', - './app/**/*.{ts,tsx}', - './src/**/*.{ts,tsx}', - ], - theme: { - container: { - center: true, - padding: "2rem", - screens: { - "2xl": "1400px", - }, - }, - extend: { - colors: { - border: "hsl(var(--border))", - input: "hsl(var(--input))", - ring: "hsl(var(--ring))", - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", - primary: { - DEFAULT: "hsl(var(--primary))", - foreground: "hsl(var(--primary-foreground))", - }, - secondary: { - DEFAULT: "hsl(var(--secondary))", - foreground: "hsl(var(--secondary-foreground))", - }, - destructive: { - DEFAULT: "hsl(var(--destructive))", - foreground: "hsl(var(--destructive-foreground))", - }, - muted: { - DEFAULT: "hsl(var(--muted))", - foreground: "hsl(var(--muted-foreground))", - }, - accent: { - DEFAULT: "hsl(var(--accent))", - foreground: "hsl(var(--accent-foreground))", - }, - popover: { - DEFAULT: "hsl(var(--popover))", - foreground: "hsl(var(--popover-foreground))", - }, - card: { - DEFAULT: "hsl(var(--card))", - foreground: "hsl(var(--card-foreground))", - }, - }, - borderRadius: { - lg: "var(--radius)", - md: "calc(var(--radius) - 2px)", - sm: "calc(var(--radius) - 4px)", - }, - keyframes: { - "accordion-down": { - from: { height: 0 }, - to: { height: "var(--radix-accordion-content-height)" }, - }, - "accordion-up": { - from: { height: "var(--radix-accordion-content-height)" }, - to: { height: 0 }, - }, - }, - animation: { - "accordion-down": "accordion-down 0.2s ease-out", - "accordion-up": "accordion-up 0.2s ease-out", - }, - }, - }, - plugins: [require("tailwindcss-animate")], - } - - \ No newline at end of file