Also, here goes my "moat" for guix-hosting.com, but as RMS once sang:
"Hoarders can get piles of money, That is true, hackers, that is true. But they cannot help their neighbors; That's not good, hackers, that's not good." https://www.gnu.org/music/free-software-song.en.html Edouard Klein <[email protected]> writes: > Hi Maxim, > > Good job ! It must not have been easy to come up with a series of steps > that actually work... > > The method I use for https://guix-hosting.com/ is somewhat different and > does not require partitionning the disk but has the disadvantage of > ending up with an ext4 drive instead of btrfs, which now that I have > space problems with the store (mitigated by some aggressive gc-ing see > https://the-dam.org/docs/explanations/GarbageCollection.html), may be > nice to have. > > A single pass of btrfs-convert may solve that later problem however. > > Here is the method, jottled down quickly, please forgive me if I did not > take the time to publish it properly and sooner. > > On your main machine, create an image of the system you want on your > VPS, or use the base install image from the GNU Guix website: > > guix system image /tmp/baseGS.scm > > Reboot your VPS in rescue mode, then in the rescue system, run: > > : apt update > : apt install qemu-utils # Do it first otherwise no space left to do it after > : rm /var/cache/apt/archives/* > : wget $TOTO # The image created earlier, you can also scp it from your > main machine to the rescue. > : qemu-img dd if=gs.qcow2 bs=4M of=/dev/sdb -O raw > > > Resize the partition > : fdisk /dev/sdb > then d, n, p, w to recreate the partition till the end of the disk > Resize the FS > : resize2fs /dev/sdb2 > > # I guesse here is where btrfs-convert would be appropriate > > From there you can reboot into Guix and it should work. > > As for the system I use (minimal-ovh) from my channel as a base: > > > https://gitlab.com/edouardklein/guix/-/blob/beaverlabs/beaver/system.scm?ref_type=heads#L171 > > which looks mostly like yours. > > > Again I apologize for not publishing it sooner, I guess it would have > saved you some troubles. > > Cheers, > > Edouard. > > Maxim Cournoyer <[email protected]> writes: > >> Hi, >> >> I've recently experimented with installing Guix System on a cheap OVH >> VPS server, and here are my findings in case it helps someone else: >> >> 1. The base images do not include Guix System, so start with something >> like Debian 12 or newer. >> >> 2. From their web interface, reboot into their rescue mode. >> >> 3. Make enough space on the rescue root to have about 500 MiB free, >> enough for 'apt install guix' to succeed. I found one unused kernel >> image which freed a lot of space, along with 'gcc'. >> >> 4. Recreate /dev/sdb1 from 20 GB to 15 GB, and create a new 5 GB >> partition after that, as /dev/sdb2. Mount /dev/sdb2 as /gnu in the >> rescue. This is because the rescue file system is too small to run >> 'guix system init'. >> >> I've also opted for Btrfs file system, and made sure to mount the >> partitions with 'mount -o compress=zstd ...' to shrink space usage as >> much as I could. >> >> 5. Run 'guix system init /mnt your-config.scm', where /mnt is the mount >> point for /dev/sdb1. For the config, start with the bare-bones.tmpl >> config. Use plain GRUB (BIOS, not UEFI), and add the virtio_scsi module >> to the initrd: >> >> (initrd-modules (cons "virtio_scsi" ; Needed to find the disk >> %base-initrd-modules)) >> >> >> The other important bit to see the kernel messages at boot is this: >> >> (kernel-arguments (list "console=ttyS0 console=tty0")) >> >> >> >> Here's what my actual config file looks like, with some parts redacted: >> >> (use-modules (gnu)) >> (use-service-modules networking ssh) >> (use-package-modules ssh) >> >> (operating-system >> (host-name "vps-xxx") >> (locale "en_US.utf8") >> >> (bootloader (bootloader-configuration >> (bootloader grub-bootloader) >> (targets '("/dev/sdb")))) >> >> (kernel-arguments (list "console=ttyS0 console=tty0")) >> >> (file-systems (cons* (file-system >> (device (uuid >> "bbf61fb4-b6ce-44af-ac57-1850cd708965")) >> (mount-point "/") >> (type "btrfs") >> (options "compress=zstd")) >> %base-file-systems)) >> >> (initrd-modules (cons "virtio_scsi" ; Needed to find the disk >> %base-initrd-modules)) >> >> ;; This is where user accounts are specified. The "root" >> ;; account is implicit, and is initially created with the >> ;; empty password. >> (users (cons (user-account >> (name "some-user") >> (group "users") >> ;; Adding the account to the "wheel" group >> ;; makes it a sudoer. Adding it to "audio" >> ;; and "video" allows the user to play sound >> ;; and access the webcam. >> (supplementary-groups '("wheel"))) >> %base-user-accounts)) >> >> ;; Add services to the baseline: a DHCP client and an SSH >> ;; server. You may wish to add an NTP service here. >> (services >> (append >> (list (service dhcp-client-service-type) >> (service openssh-service-type >> (openssh-configuration >> (openssh openssh-sans-x) >> (port-number 2222) >> (authorized-keys >> `(("some-user" ,(plain-file "maxim-ssh.pub" >> "ssh-XXX XXXXXXXX"))))))) >> %base-services)) >> >> (sudoers-file >> (plain-file "sudoers" >> (string-append (plain-file-content %sudoers-specification) >> "some-user ALL = NOPASSWD: ALL\n")))) >> >> The sudoers-file part is so that I can 'guix deploy' to it. >> >> Happy hacking!
