summaryrefslogtreecommitdiff
path: root/2018-03-25-guix-libreplanet
diff options
context:
space:
mode:
Diffstat (limited to '2018-03-25-guix-libreplanet')
-rw-r--r--2018-03-25-guix-libreplanet/graph.pngbin0 -> 75173 bytes
-rw-r--r--2018-03-25-guix-libreplanet/guix-libreplanet.org167
-rw-r--r--2018-03-25-guix-libreplanet/guix-libreplanet.pdfbin169367 -> 315346 bytes
-rw-r--r--2018-03-25-guix-libreplanet/guix-logo.pngbin0 -> 28661 bytes
-rw-r--r--2018-03-25-guix-libreplanet/guixsd-logo.pngbin0 -> 25317 bytes
5 files changed, 133 insertions, 34 deletions
diff --git a/2018-03-25-guix-libreplanet/graph.png b/2018-03-25-guix-libreplanet/graph.png
new file mode 100644
index 0000000..4be0abb
--- /dev/null
+++ b/2018-03-25-guix-libreplanet/graph.png
Binary files differ
diff --git a/2018-03-25-guix-libreplanet/guix-libreplanet.org b/2018-03-25-guix-libreplanet/guix-libreplanet.org
index d6958bc..10a4594 100644
--- a/2018-03-25-guix-libreplanet/guix-libreplanet.org
+++ b/2018-03-25-guix-libreplanet/guix-libreplanet.org
@@ -52,7 +52,7 @@
figuring out how to view the exact source for a running program is
tricky
- - ??
+ - <explain>
* common issues
@@ -71,9 +71,10 @@
* common issues
- trying out new stuff can lead to sadness
+ major system upgrades can lead to sadness
- - ever upgrade your distro, reboot, and get an unusable system?
+ ever upgrade your system, reboot, and find yourself in a completely
+ broken state?
* freedom: embedded
@@ -82,37 +83,48 @@
* what is guixsd?
- <logo>
+ \begin{center}
+ \includegraphics{guixsd-logo.png}
+ \end{center}
- fully-free GNU/Linux distribution with an advanced package
- manager and system upgrade mechanism
+ GuixSD is a fully-free GNU/Linux distribution with an advanced
+ package manager and system upgrade mechanism
* what is guix?
- GuixSD's package manager
+ \begin{center}
+ \includegraphics[width=8cm]{guix-logo.png}
+ \end{center}
- “functional” package manager
+ Guix is GuixSD's package manager (like apt, yum, pacman, etc.)
- atomic updates and rollbacks
+ - unpriviliged package management
+ - per-user profiles
+ - atomic updates and rollbacks
+ - reproducible builds
+ - tools for many use-cases
* unprivileged package management
- Users can build and install software *without root privileges*
+ users can build and install software *without root privileges*
tired: =sudo apt install emacs=
wired: =guix package -i emacs=
-* unprivileged package management
+* per-user profiles
- Each user may have one or more “profiles”, a union of many packages.
+ each user may have one or more “profiles”, a union of many packages,
+ *without clobbering another user’s environment*
- Use cases:
+ use cases:
- Alyssa and Ben use different versions of Emacs
- Alyssa hacks on 2 Ruby projects that require different versions
-* experiment without fear
+* transactional upgrades and rollbacks
+
+ experiment without fear!
=guix package --upgrade emacs=
@@ -120,29 +132,34 @@
=guix package --roll-back=
-* experiment without fear
+* transactional upgrades and rollbacks
- =guix system reconfigure=
+ system upgrades are transactional, too!
+
+ =sudo guix system reconfigure my-machine.scm=
oh no, the latest GuixSD updates broke my system!
- <image of grub menu with older generations?>
+ no worries, just reboot and select the previous, working version
+ from the bootloader menu
* inspecting source code
- quickly grab the source code for a package
-
- =guix build --source gimp=
-
-* inspecting dependency graph
+ quickly grab the source code for a package:
- =guix graph=
+ #+BEGIN_SRC sh
+ tar xf $(guix build --source gimp)
+ #+END_SRC
- <small dependency graph image>
+* visualizing dependencies
-* sharing system configurations
+ #+BEGIN_SRC sh
+ guix graph haunt | dot -Tpng > graph.png
+ #+END_SRC
- <minimal code example here>
+ \begin{center}
+ \includegraphics[width=11cm]{graph.png}
+ \end{center}
* sharing packages
@@ -168,6 +185,44 @@
=guix environment --manifest=guix.scm=
+* experimenting in isolated environments
+
+ how about a container?
+
+ =guix environment –-container --ad-hoc ruby -- irb=
+
+* sharing system configurations
+
+ #+latex: \tiny{
+ #+BEGIN_SRC scheme
+ (operating-system
+ (host-name "izanagi")
+ (timezone "America/New_York")
+ (locale "en_US.UTF-8")
+ (bootloader (grub-configuration (target "/dev/sda")))
+ (file-systems (cons (file-system
+ (device "root")
+ (title 'label)
+ (mount-point "/")
+ (type "ext4"))
+ %base-file-systems))
+ (users (list (user-account
+ (name "dave")
+ (comment "David Thompson")
+ (group "users")
+ (supplementary-groups '("wheel" "netdev" "audio" "video"
+ "cdrom" "kvm" "input" "dialout")
+ (home-directory "/home/dave"))))
+ (packages (cons* arc-theme arc-icon-theme
+ htop less man-db ncurses nss-certs openssh unzip rsync
+ gnome-shell-extensions gnome-tweak-tool
+ %base-packages))
+ (services (cons* (gnome-desktop-service)
+ %desktop-services))
+ (name-service-switch %mdns-host-lookup-nss))
+ #+END_SRC
+ #+latex: }
+
* sharing binaries
start a server to share your builds:
@@ -197,8 +252,8 @@
this is a *cross-distro effort*, but Guix facilitates
reproducibility more than others
- see Chris Lamb's talk /You think you're not a target? A tale of
- three developers.../ from yesterday for more perspective
+ see Chris Lamb's talk /“You think you're not a target? A tale of
+ three developers...”/ from yesterday for more perspective
* reproducible builds
@@ -225,7 +280,15 @@
* customize packages
- let's make some changes!
+ build Ruby using different source code:
+
+ #+BEGIN_SRC sh
+ guix build ruby --with-source=ruby-2.5.0.tar.gz
+ #+END_SRC
+
+* customize packages
+
+ let's make some changes to the source code itself!
#+BEGIN_SRC sh
git clone https://git.savannah.gnu.org/git/guix.git
@@ -233,6 +296,7 @@
guix environment guix
./configure
make
+ ./pre-inst-env guix edit ruby
guix build ruby
#+END_SRC
@@ -245,17 +309,52 @@
\tiny(see /Solving the deployment crisis with GNU Guix/ from
LibrePlanet 2016 for reasons why Docker may not be so great)
-* extending guix
+* interoperate with other systems
- GuixSD is essentially a big Scheme library
+ or maybe you want something like snap or flatpak?
+
+ make a tarball bundle that anyone can extract on their GNU/Linux
+ system:
- easy to write new tools that use the exact same APIs that the core
- Guix tools use
+ =guix pack guile emacs geiser=
+
+* interoperate with other systems
+
+ or maybe you want assistance translating foreign packages into Guix
+ packages:
+
+ =guix import pypi flask=
* literally: embedded
GuixSD now runs on the Beaglebone Black single-board computer!
+ #+latex: \scriptsize{
+ #+BEGIN_SRC scheme
+ (operating-system
+ (bootloader (bootloader-configuration
+ (bootloader u-boot-beaglebone-black-bootloader)
+ (target "/dev/mmcblk1")))
+ (initrd-modules (cons "omap_hsmmc" %base-initrd-modules))
+ (services (cons* (dhcp-client-service)
+ (agetty-service
+ (agetty-configuration
+ (extra-options '("-L"))
+ (baud-rate "115200")
+ (term "vt100")
+ (tty "ttyO0")))
+ %base-services))
+ ...)
+ #+END_SRC
+ #+latex: }
+
+* extending guix
+
+ GuixSD is essentially a big Scheme library
+
+ with a little Scheme know-how its easy to write new tools that use
+ the exact same APIs that the core Guix tools use
+
* the freedom to contribute
GNU Guix is a welcoming community:
@@ -276,6 +375,6 @@
* credits
- Copyright 2018 David Thompson
+ © 2018 David Thompson
Licensed under Creative Commons Attribution Share-Alike 4.0
diff --git a/2018-03-25-guix-libreplanet/guix-libreplanet.pdf b/2018-03-25-guix-libreplanet/guix-libreplanet.pdf
index 09b3615..d7a49e0 100644
--- a/2018-03-25-guix-libreplanet/guix-libreplanet.pdf
+++ b/2018-03-25-guix-libreplanet/guix-libreplanet.pdf
Binary files differ
diff --git a/2018-03-25-guix-libreplanet/guix-logo.png b/2018-03-25-guix-libreplanet/guix-logo.png
new file mode 100644
index 0000000..cadfc65
--- /dev/null
+++ b/2018-03-25-guix-libreplanet/guix-logo.png
Binary files differ
diff --git a/2018-03-25-guix-libreplanet/guixsd-logo.png b/2018-03-25-guix-libreplanet/guixsd-logo.png
new file mode 100644
index 0000000..8c4b4ae
--- /dev/null
+++ b/2018-03-25-guix-libreplanet/guixsd-logo.png
Binary files differ