Streamline the installer for fresh Arch installs
This commit is contained in:
1 parent
501d066e64
commit
d59725f193
14 files changed
+234
-44
No files matched your search
+22
-6
@@ -8,8 +8,10 @@ with `--check`.
|
||||
|
||||
| Path | Role |
|
||||
| --- | --- |
|
||||
| `bootstrap.sh` | one-command install on a bare machine: installs git, clones, runs `install.sh` |
|
||||
| `install.sh` | flags and the order the steps run in |
|
||||
| `install/helpers/lib.sh` | reporting, file copies, unit queries |
|
||||
| `install/helpers/lib.sh` | reporting, sections, the warning summary, file copies, unit queries |
|
||||
| `install/steps/preflight.sh` | the checks that stop a run early, and the sudo keepalive |
|
||||
| `install/helpers/as-root.sh` | `as_root`, a no-op when already root |
|
||||
| `install/steps/directories.sh` | the directories the shell and scripts expect |
|
||||
| `install/steps/packages.sh` | repo and AUR packages, and the yay bootstrap |
|
||||
@@ -23,6 +25,16 @@ with `--check`.
|
||||
|
||||
## Steps
|
||||
|
||||
0. **Preflight** stops before anything is written when the installer is run as
|
||||
root (it installs into `$HOME`, and `makepkg` refuses to build as root), when
|
||||
`pacman` is missing, when `sudo` does not accept the user, or when
|
||||
`archlinux.org` cannot be reached and packages are wanted. It warns when
|
||||
`systemd-networkd`, `iwd`, `dhcpcd` or `netctl` is enabled, because
|
||||
NetworkManager is enabled below and two network managers fight over the same
|
||||
interface after a reboot. `archinstall`'s "copy ISO network config" option
|
||||
leaves exactly that behind. Once sudo is accepted it is refreshed every
|
||||
minute in the background, so a long AUR build does not stop halfway for a
|
||||
password.
|
||||
1. **Directories** are created first, because nothing below can write into a
|
||||
directory that is not there: `~/.config/blob`, `~/.config/systemd/user/app.slice.d`,
|
||||
`~/.local/state/blob`, `~/.local/share` and `~/.cache/blob`. A fresh Arch
|
||||
@@ -32,9 +44,10 @@ with `--check`.
|
||||
create the parent of a link, so this step makes `~/.local/share` itself rather
|
||||
than assuming step 1 ran.
|
||||
3. **Packages** come from `packages/blob.packages` and
|
||||
`packages/blob-aur.packages`. A machine with no AUR helper gets `yay-bin`
|
||||
built once with `makepkg`. A failed batch refreshes the databases and retries,
|
||||
then falls back to one package at a time, so a single name that no longer
|
||||
`packages/blob-aur.packages`. Repo packages go in with a full
|
||||
`pacman -Syu`, never a partial upgrade. A machine with no AUR helper gets
|
||||
`yay-bin` built once with `makepkg`. A failed batch upgrades the system on
|
||||
its own, then falls back to one package at a time, so a single name that no longer
|
||||
resolves cannot cost you the other hundred and the config, service and login
|
||||
steps below. See [packages.md](packages.md).
|
||||
4. **Config** is copied into `~/.config`: `hypr/`, the themed app configs,
|
||||
@@ -152,8 +165,11 @@ with `--check`.
|
||||
11. **Launch.** `sddm`, `hyprland`, `quickshell` and `uwsm` are checked one last
|
||||
time and any that are missing are named, because that is the whole difference
|
||||
between a desktop and a console. Then, when the installer was run from a
|
||||
console and nothing graphical is running, it starts `sddm.service` so the
|
||||
desktop appears without a reboot. `--no-launch` prints the command instead.
|
||||
console and nothing graphical is running, it offers a reboot, which brings
|
||||
up NetworkManager, the boot splash and any new kernel modules together.
|
||||
Declining starts `sddm.service` so the desktop appears without one.
|
||||
`--no-launch` prints the command instead. Every warning from the run is
|
||||
listed again just before this step.
|
||||
`--autologin` writes `/etc/sddm.conf.d/zzz-blob-autologin.conf` for the
|
||||
current user.
|
||||
|
||||
|
||||
+6
-4
@@ -84,10 +84,12 @@ packages pulled in under a different name no longer come back on every run. AUR
|
||||
packages are built one at a time, so a build that fails is reported at the end
|
||||
instead of stopping the install.
|
||||
|
||||
Repo packages go in one `pacman` call. If that call fails the databases are
|
||||
refreshed with `pacman -Sy` and it is tried again, because a stale database is
|
||||
what turns an installed-and-present package into `target not found`. If it still
|
||||
fails the packages are installed one at a time, so one unresolvable name does not
|
||||
Repo packages go in one `pacman -Syu --needed` call, so the databases are
|
||||
fresh and the system is upgraded in the same transaction. Refreshing the
|
||||
databases without upgrading (`-Sy` then `-S`) is a partial upgrade, which Arch
|
||||
does not support and which breaks libraries on a fresh install whose ISO is a
|
||||
few weeks old. If that call fails the system is upgraded on its own and the
|
||||
packages are installed one at a time, so one unresolvable name does not
|
||||
block the other hundred - which is how a missing `sddm` used to turn into a
|
||||
machine with no login screen. `install.sh` ends by naming any of `sddm`,
|
||||
`hyprland`, `quickshell` and `uwsm` that are still not installed.
|
||||
|
||||
Reference in new issue
Block a user