unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: ng0 <contact.ng0@cryptolab.net>
To: Andy Wingo <wingo@igalia.com>
Cc: guix-devel@gnu.org
Subject: Re: how to "install" guixsd on a digitalocean server
Date: Fri, 7 Apr 2017 12:27:57 +0000	[thread overview]
Message-ID: <20170407122757.wpm7q2brkmrjl6hj@abyayala> (raw)
In-Reply-To: <87pogo8lqj.fsf@pobox.com>

Hi,

thanks for documenting this on the list, it's really cool and useful.
It looks to some parts
applicable to many DigitalOcean-like hosters :)

Andy Wingo transcribed 6.6K bytes:
> Hi,
> 
> I just "installed" GuixSD on a DigitalOcean droplet.  You can't actually
> install GuixSD; you have to mutate an existing installation into
> GuixSD.  But fine.
> 
> So I installed the latest Debian x86_64 image that they offer.  All fine
> and easy.  You tell DigitalOcean your SSH key, then you can SSH directly
> to root@your-ip.
> 
> Having done this, I proceeded to the binary Guix installation:
> 
>     wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.12.0.x86_64-linux.tar.xz
>     gpg --keyserver pgp.mit.edu --recv-keys BCA689B636553801C3C62150197A5888235FACAC
>     wget ftp://alpha.gnu.org/gnu/guix/guix-binary-0.12.0.x86_64-linux.tar.xz.sig
>     gpg --verify guix-binary-0.12.0.x86_64-linux.tar.xz.sig
> 
>     cd /tmp
>     tar --warning=no-timestamp -xf ~/guix-binary-0.12.0.x86_64-linux.tar.xz
>     mv var/guix/ /var/
>     mv gnu/ /
>     ln -sf /var/guix/profiles/per-user/root/guix-profile ~root/.guix-profile
>     groupadd --system guixbuild
>     for i in `seq -w 1 10`; do useradd -g guixbuild -G guixbuild -d /var/empty -s `which nologin` -c "Guix build user $i" --system guixbuilder$i; done
> 
> Debian uses systemd so as the manual tells me, I did:
> 
>     ln -s ~root/.guix-profile/lib/systemd/system/guix-daemon.service /etc/systemd/system/
>     systemctl start guix-daemon && systemctl enable guix-daemon
> 
> This gave an error for the "enable" part; apparently that doesn't work.
> But starting the daemon worked fine.  In the future when I would reboot
> the machine I would have to manually do a "systemctl start guix-daemon"
> again.

Yeah, I found out about this when I set up a new Debian 8 with Guix.
There's a solution for Debian 8 here:
https://lists.gnu.org/archive/html/guix-devel/2017-03/msg00810.html

> So then:
> 
>     ~root/.guix-profile/bin/guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub
> 
> But at this point it started carping about locales.  The manual doesn't
> mention what you need to do until later on, but what you do is this:
> 
>     ~/.guix-profile/bin/guix package -i glibc-utf8-locales
>     export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
> 
> Then what init file do you add to for the environment variables?  I
> think it's ~/.profile but IDK.  I did this:
> 
>     echo 'source ~/.guix-profile/etc/profile' >> ~/.profile
> 
> However this didn't include the LOCPATH thing, so you have to do this
> too:
> 
>     echo 'export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale' >> ~/.profile
> 
> OK.  Only problem now is that ~/.guix-profile/etc/profile has absolute
> paths in it, instead of pointers into the user's $HOME.  Humm.
> 
> Anyway!  Off to update my Guix:
> 
>     guix pull
> 
> Unfortunately this failed due to lack of memory.  I had installed on the
> smallest instance with 512MB memory.  So for now I bumped it up to 1G
> and retried and was able to upgrade.  Then:
> 
>     guix package -i emacs
> 
> but I found that was installing X things and cancelled; had to ask on
> IRC what was the right thing because guix package --search=emacs showed
> too much info for me to find emacs-no-x :)
> 
>     guix package -i emacs-no-x
> 
> OK.  So I edit a new os-config.scm because I'm going to be trying to
> install GuixSD.  Here is what I ended up with.  Three notes:
> 
>  (1) I used the stock template but you have to customize to use
>      "/dev/vda", which is what DigitalOcean gives you.
> 
>  (2) DigitalOcean doesn't use DHCP, and instead fills in some static
>      information in /etc/networking/interface apparently.  I read that
>      and made the static networking config.
> 
>  (3) Why do we promote lsh by default?  It took me quite some looking to
>      figure out why my authorized_keys wasn't working.  The fix was to
>      just use OpenSSH.
> 
>     (use-modules (gnu))
>     (use-service-modules networking ssh)
>     (use-package-modules admin)
> 
>     (operating-system
>       (host-name "guix-potluck")
>       (timezone "Europe/Berlin")
>       (locale "en_US.UTF-8")
> 
>       ;; Assuming /dev/sdX is the target hard disk, and "my-root" is
>       ;; the label of the target root file system.
>       (bootloader (grub-configuration (device "/dev/vda")))
>       (file-systems (cons (file-system
>                             (device "/dev/vda1")
>                             (mount-point "/")
>                             (type "ext4"))
>                           %base-file-systems))
> 
>       ;; 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 "wingo")
>                     (group "users")
>                     ;; Adding the account to the "wheel" group
>                     ;; makes it a sudoer.
>                     (supplementary-groups '("wheel"))
>                     (home-directory "/home/wingo"))
>                    %base-user-accounts))
> 
>       ;; Globally-installed packages.
>       (packages (cons tcpdump %base-packages))
> 
>       (services (cons* (static-networking-service "eth0" "46.101.231.54"
>                         #:netmask "255.255.192.0"
>                         #:gateway "46.101.192.1"
>                         #:name-servers '("8.8.8.8" "8.8.4.4"))
>                        (service openssh-service-type
>                                 (openssh-configuration
>                                 (permit-root-login 'without-password)))
>                        %base-services)))
> 
> I don't know if I _had_ to do this, but I think it was necessary: you go
> into the DigitalOcean "control panel" to the "Kernel" section and you
> choose the "GrubLoader" kernel.  Apparently it used to be the case in DO
> that kernels were always configured outside the VM.  You have to switch
> to a GrubLoader kernel to let the VM choose.  That's what I wanted so I
> did that.
> 
> OK, time to build the image:
> 
>     guix system build os-config.scm
> 
> Great, it built just fine!  Now reconfigure:
> 
>     guix system reconfigure os-config.scm
> 
> Lol whoops.  For some reason the builders were behind so I had to build
> grub2 which needs qemu-minimal at build-time due to tests, but
> qemu-minimal also needed to be built but *its* tests wouldn't run
> because they ran out of memory on the 1G instance.  So I bumped RAM
> again to 2G.  I would recommend in hindsight for people to (a) start
> with the smallest instance, as you can resize CPU/RAM back and forth
> with no problem but you can't shrink the disk apparently; then (b)
> immediately size-up CPU/RAM so your builds go faster and actually
> complete; then (c) shrink CPU/RAM to what you need.
> 
> When it finally built, then it failed to reconfigure because some things
> were conflicting between /etc/ssl from the Debian install and what
> GuixSD wanted.  But you can't just move /etc out of the way because that
> has /etc/passwd etc which the build daemon needs for "guixbuild" :P  So:
> 
>     mv /etc /old-etc
>     mkdir /etc
>     cp /old-etc/{passwd,group,shadow,gshadow,mtab} /etc/
> 
> Then finally:
> 
>     guix system reconfigure os-config.scm
> 
> Now once you reboot, it works :)
> 
> That's all.  Hope yall find this useful.  Now, to clean up the remaining
> Debian bits!
> 
> Andy
> 

  reply	other threads:[~2017-04-07 12:28 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-07 12:07 how to "install" guixsd on a digitalocean server Andy Wingo
2017-04-07 12:27 ` ng0 [this message]
2017-04-07 12:31 ` Pjotr Prins
2017-04-07 13:40   ` Leo Famulari
2017-04-07 13:42 ` Leo Famulari
2017-04-07 19:57   ` Ludovic Courtès
2017-04-09  1:42     ` Use OpenSSH in the bare-bones GuixSD template [was Re: how to "install" guixsd on a digitalocean server] Leo Famulari
2017-04-09  1:48       ` Leo Famulari
2017-04-09  9:08         ` ng0
2017-04-09 14:18           ` Leo Famulari
2017-04-09 14:21             ` ng0
2017-04-12 15:45               ` Leo Famulari
2017-04-07 14:04 ` how to "install" guixsd on a digitalocean server myglc2
2017-04-07 14:14   ` Andy Wingo
2017-04-07 14:31     ` ng0
2017-04-07 18:34       ` myglc2
2017-04-07 21:37 ` Ludovic Courtès
2017-04-13 15:28 ` ng0
2017-04-13 15:51   ` Andy Wingo
2017-04-13 16:06     ` ng0

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170407122757.wpm7q2brkmrjl6hj@abyayala \
    --to=contact.ng0@cryptolab.net \
    --cc=guix-devel@gnu.org \
    --cc=wingo@igalia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).