139 lines
3.6 KiB
Org Mode
139 lines
3.6 KiB
Org Mode
* Enable remote installation
|
|
|
|
After booting the [[https://guix.gnu.org/en/download/][Gnu Guix System ISO image]], elect to drop into a shell after selecting your language and location.
|
|
|
|
Please start =SSH= and setup a non-blank root password.
|
|
|
|
#+begin_src sh
|
|
herd start ssh-daemon
|
|
passwd
|
|
#+end_src
|
|
|
|
* Prepare the installation
|
|
|
|
You can "ssh into" the Gnu Guix System installation: =ssh root@ip_here -p port_here=.
|
|
|
|
During new installations with =QEMU=, I typically [[https://serverfault.com/questions/704294/qemu-multiple-port-forwarding][forward port]] =22= to a fixed port number (e.g., =62000=).
|
|
|
|
For my personal setup, I'm using =ssh root@localhost -p 62000=.
|
|
|
|
** Create partitions
|
|
Identify your disk partitions (=fdisk -l= can help).
|
|
|
|
Create 2 partitions by running =cgdisk /dev/sda= (in my case)
|
|
- Setup the EFI partition (code =ef00=) of 300 MB (=/dev/sda1= in my case)
|
|
- Setup the Linux partition (default code) with the remaining disk space (=/dev/sda2= in my case)
|
|
|
|
=Write= changes to disk and then =Quit= the =cgdisk= interface.
|
|
|
|
** Create an encrypted device
|
|
|
|
Encrypt the main partition.
|
|
|
|
#+begin_src sh
|
|
cryptsetup luksFormat --type luks1 /dev/sda2
|
|
#+end_src
|
|
|
|
** Open LUKS device
|
|
|
|
Open the encrypted device.
|
|
|
|
#+begin_src sh
|
|
cryptsetup luksOpen /dev/sda2 guixvm
|
|
#+end_src
|
|
|
|
** Prepare installation
|
|
|
|
Run all the commands below to configure partitions and setup filesystems.
|
|
|
|
#+begin_src sh
|
|
mkfs.btrfs -L guixroot /dev/mapper/guix
|
|
|
|
mount -t btrfs /dev/mapper/guixvm /mnt
|
|
|
|
btrfs subvolume create /mnt/root
|
|
btrfs subvolume create /mnt/boot
|
|
btrfs subvolume create /mnt/home
|
|
btrfs subvolume create /mnt/gnu
|
|
btrfs subvolume create /mnt/data
|
|
btrfs subvolume create /mnt/log
|
|
btrfs subvolume create /mnt/swap
|
|
|
|
btrfs filesystem mkswapfile --size 4g /mnt/swap/swapfile
|
|
btrfs subvolume snapshot -r /mnt/root /mnt/root-blank
|
|
|
|
umount /mnt
|
|
|
|
mount -o subvol=root /dev/mapper/guix /mnt
|
|
mkdir -p /mnt/home /mnt/gnu /mnt/data /mnt/var/log /mnt/boot /mnt/swap
|
|
mount -o subvol=home /dev/mapper/guix /mnt/home
|
|
mount -o subvol=gnu /dev/mapper/guix /mnt/gnu
|
|
mount -o subvol=data /dev/mapper/guix /mnt/data
|
|
mount -o subvol=log /dev/mapper/guix /mnt/var/log
|
|
mount -o subvol=boot /dev/mapper/guix /mnt/boot
|
|
mount -o subvol=swap /dev/mapper/guix /mnt/swap
|
|
|
|
mkfs.vfat /dev/sda1
|
|
mkdir -p /mnt/boot/efi
|
|
mount /dev/sda1 /mnt/boot/efi
|
|
|
|
herd start cow-store /mnt
|
|
#+end_src
|
|
|
|
* Install the system
|
|
|
|
#+begin_src sh
|
|
mkdir -p /mnt/etc
|
|
cp config.scm /mnt/etc/config.scm
|
|
guix system init /mnt/etc/config.scm /mnt
|
|
#+end_src
|
|
|
|
You can now reboot into your new system (shutdown/start or reboot depending on your setup).
|
|
|
|
#+begin_src sh
|
|
reboot
|
|
#+end_src
|
|
|
|
* Setup the new system
|
|
|
|
** Update passwords
|
|
|
|
Both passwords for the =root= and =user= users are initially empty.
|
|
|
|
Let's login as =root= and change that.
|
|
|
|
#+begin_src sh
|
|
passwd
|
|
passwd user
|
|
#+end_src
|
|
|
|
** Update the system
|
|
|
|
You can now continue the configuration process remotely (=ssh user@localhost -p 62000= in my case).
|
|
|
|
#+begin_src sh
|
|
guix pull --timeout=800 --max-silent-time=800
|
|
sudo guix system reconfigure /etc/config.scm
|
|
reboot
|
|
#+end_src
|
|
|
|
** Fix the clock
|
|
|
|
Connect to the machine remotely (=ssh user@localhost -p 62000= in my case).
|
|
|
|
#+begin_src sh
|
|
guix package -i ntp
|
|
GUIX_PROFILE="$HOME/.guix-profile"
|
|
. "$GUIX_PROFILE/etc/profile"
|
|
sudo ntpdate -s time.nist.gov && sudo hwclock --systohc
|
|
guix package -r ntp
|
|
#+end_src
|
|
|
|
** User environment setup
|
|
#+begin_src sh
|
|
sudo guix system -L ~/src/guix-config reconfigure ~/src/guix-config/hosts/$(hostname).scm
|
|
sudo guix home -L ~/src/guix-config reconfigure ~/src/guix-config/home/$(hostname).scm
|
|
#+end_src
|
|
|
|
|
|
|