guix.texi 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717
  1. \input texinfo @c -*- texinfo -*-
  2. @c %**start of header
  3. @setfilename guix.info
  4. @settitle Guix System
  5. @documentencoding UTF-8
  6. @documentlanguage en
  7. @c %**end of header
  8. @finalout
  9. @titlepage
  10. @title Guix System
  11. @author Joshua Branson
  12. @end titlepage
  13. @contents
  14. @ifnottex
  15. @node Top
  16. @top Guix System
  17. @end ifnottex
  18. @menu
  19. * One more section::
  20. * Guix System and Libreboot::
  21. * Another section::
  22. @detailmenu
  23. --- The Detailed Node Listing ---
  24. One more section
  25. * snteahu snthu::
  26. * santsnhu::
  27. Guix System and Libreboot
  28. * Preparation::
  29. * Installation::
  30. * Completion::
  31. * Conclusion::
  32. * References::
  33. * Acknowledgements::
  34. * License::
  35. Installation
  36. * Wireless Setup::
  37. @end detailmenu
  38. @end menu
  39. @node One more section
  40. @chapter One more section
  41. snatheu sntha u
  42. saneh sntaeh
  43. @menu
  44. * snteahu snthu::
  45. * santsnhu::
  46. @end menu
  47. @node snteahu snthu
  48. @section snteahu snthu
  49. @node santsnhu
  50. @section santsnhu
  51. santeo husnt husnt
  52. sante hsnh
  53. sntahu sntea
  54. @node Guix System and Libreboot
  55. @chapter Guix System and Libreboot
  56. Guix System is an exotic distribution of GNU+Linux operating system,
  57. with Guix as package+system manager, Linux-Libre as kernel and
  58. Shepherd as init system.
  59. Libreboot is a de-blobbed distribution of Coreboot firmware. By
  60. default, Libreboot comes with GRUB bootloader as a payload.
  61. The objective of this manual is to provide step-by-step guide for
  62. setting up Guix System (stand-alone Guix), with Full Disk
  63. Encryption (FDE), on devices powered by Libreboot.
  64. Any users, for their generalized use cases, need not stumble away from
  65. this guide to accomplish the setup. Advancers, for deviant use cases,
  66. will have to explore outside this guide for customization; although
  67. this guide provides information that is of paramount use.
  68. Let us begin!
  69. @menu
  70. * Preparation::
  71. * Installation::
  72. * Completion::
  73. * Conclusion::
  74. * References::
  75. * Acknowledgements::
  76. * License::
  77. @end menu
  78. @node Preparation
  79. @section Preparation
  80. In the current GNU+Linux system, open terminal as root user.
  81. Insert USB drive and get the device letter @code{/dev/sdX}, where “X” is the
  82. device letter.
  83. @example
  84. lsblk --list
  85. @end example
  86. @example
  87. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  88. sda 8:0 0 223.6G 0 disk
  89. sda1 8:1 0 2M 0 part
  90. sda2 8:2 0 3.7G 0 part
  91. sda3 8:3 0 219.9G 0 part /
  92. zram0 251:0 0 512M 0 disk [SWAP]
  93. @end example
  94. Unmount the device just in case if it is auto-mounted.
  95. @example
  96. umount /dev/sdX --verbose
  97. @end example
  98. Download the Guix System ISO installer package and it’s GPG signature;
  99. where “a.b.c” is the version number and “sss” is the system
  100. architecture.
  101. @example
  102. wget --verbose https://ftp.gnu.org/gnu/guix/guix-system-install-a.b.c.sss-linux.iso.xz
  103. wget --verbose https://ftp.gnu.org/gnu/guix/guix-system-install-a.b.c.sss-linux.iso.xz.sig
  104. @end example
  105. Import the Guix's public key.
  106. @example
  107. gpg --verbose --keyserver pool.sks-keyservers.net –-receive-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
  108. @end example
  109. Verify the GPG signature of the downloaded package.
  110. @example
  111. gpg --verbose --verify guix-system-install-a.b.c.sss-linux.iso.xz.sig
  112. @end example
  113. Extract ISO image from the downloaded package.
  114. @example
  115. xz --verbose --decompress guix-system-install-a.b.c.sss-linux.iso.xz
  116. @end example
  117. Write the extracted ISO image to the drive.
  118. @example
  119. dd if=guix-system-install-a.b.c.sss-linux.iso of=/dev/sdX status=progress; sync
  120. @end example
  121. Reboot the device.
  122. @example
  123. reboot
  124. @end example
  125. @node Installation
  126. @section Installation
  127. On reboot, as soon as the Libreboot's graphic art appears, press "S"
  128. or choose @code{Search for GRUB2 configuration on external media [s]}. Wait
  129. for the Guix System from USB drive to load.
  130. Once Guix System installer starts, choose "Install using the shell
  131. based process".
  132. Set your keyboard layout, where “lo” is the two-letter keyboard layout
  133. code (lower-case).
  134. @example
  135. loadkeys --verbose lo
  136. @end example
  137. Unblock network interfaces.
  138. @example
  139. rfkill unblock all
  140. @end example
  141. Get the names of network interfaces.
  142. @example
  143. ifconfig -v -a
  144. @end example
  145. @example
  146. enp0s25 Link encap:Ethernet HWaddr 00:1C:25:9A:37:BA
  147. UP BROADCAST MULTICAST MTU:1500 Metric:1
  148. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  149. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  150. collisions:0 txqueuelen:1000
  151. RX bytes:0 TX bytes:0
  152. Interrupt:16 Memory:98800000-98820000
  153. lo Link encap:Local Loopback
  154. inet addr:127.0.0.1 Bcast:0.0.0.0 Mask:255.0.0.0
  155. UP LOOPBACK RUNNING MTU:65536 Metric:1
  156. RX packets:2220 errors:0 dropped:0 overruns:0 frame:0
  157. TX packets:2220 errors:0 dropped:0 overruns:0 carrier:0
  158. collisions:0 txqueuelen:1000
  159. RX bytes:343511 TX bytes:343511
  160. wlp2s0 Link encap:Ethernet HWaddr E4:CE:8F:59:D6:BF
  161. inet addr:172.20.1.132 Bcast:172.20.15.255 Mask:255.255.240.0
  162. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  163. RX packets:71570 errors:0 dropped:71 overruns:0 frame:0
  164. TX packets:41752 errors:0 dropped:0 overruns:0 carrier:0
  165. collisions:0 txqueuelen:1000
  166. RX bytes:54663323 TX bytes:5894582
  167. @end example
  168. Bring the desired network interface (wired or wireless) up, where “nwif” is the network interface name.
  169. @example
  170. ifconfig -v nwif up
  171. @end example
  172. For wireless connection, follow the wireless setup.
  173. @menu
  174. * Wireless Setup::
  175. @end menu
  176. @node Wireless Setup
  177. @subsection Wireless Setup
  178. Create a configuration file using text editor, where “fname” is any
  179. desired name for file.
  180. @example
  181. nano fname.conf
  182. @end example
  183. Choose, type and save ONE of the following snippets, where ‘net’ is
  184. the network name, ‘pass’ is the password or passphrase and ‘uid’ is
  185. the user identity.
  186. For most private networks:
  187. @example
  188. network=@{
  189. ssid="net"
  190. key_mgmt=WPA-PSK
  191. psk="pass"
  192. @}
  193. @end example
  194. (or)
  195. For most public networks:
  196. @example
  197. network=@{
  198. ssid="net"
  199. key_mgmt=NONE
  200. @}
  201. @end example
  202. (or)
  203. For most organizational networks:
  204. @example
  205. network=@{
  206. ssid="net"
  207. scan_ssid=1
  208. key_mgmt=WPA-EAP
  209. identity="uid"
  210. password="pass"
  211. eap=PEAP
  212. phase1="peaplabel=0"
  213. phase2="auth=MSCHAPV2"
  214. @}
  215. @end example
  216. Connect to the configured network.
  217. @example
  218. wpa_supplicant -B -c fname.conf -i nwif
  219. @end example
  220. Assign an IP address to the network interface.
  221. @example
  222. dhclient -v nwif
  223. @end example
  224. Obtain the device letter @code{/dev/sdX} in which you would like to deploy
  225. and install Guix System, where “X” is the device letter.
  226. @example
  227. lsblk --list
  228. @end example
  229. @example
  230. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  231. sda 8:0 0 223.6G 0 disk
  232. sda1 8:1 0 2M 0 part
  233. sda2 8:2 0 3.7G 0 part
  234. sda3 8:3 0 219.9G 0 part /
  235. zram0 251:0 0 512M 0 disk [SWAP]
  236. @end example
  237. Wipe the device (Ignore if the device is new).
  238. @example
  239. shred --verbose --random-source=/dev/urandom /dev/sdX
  240. @end example
  241. Load the device-mapper module in the current kernel.
  242. @example
  243. modprobe --verbose dm_mod
  244. @end example
  245. Partition the device. Follow the prompts. Just do, GPT --> New -->
  246. Write --> Quit; defaults will be set.
  247. @example
  248. cfdisk /dev/sdX
  249. #+END_SRC>
  250. Obtain the partition number from the device, where “Y” is the
  251. partition number.
  252. #+BEGIN_SRC sh :results output :exports both
  253. lsblk --list
  254. #+END_SRC>
  255. Encrypt the partition. Follow the prompts.
  256. #+BEGIN_SRC sh :results output :exports both
  257. cryptsetup --verbose --hash whirlpool --cipher serpent-xts-plain64 --verify-passphrase --use-random --key-size 512 --iter-time 500 luksFormat /dev/sdXY
  258. #+END_SRC>
  259. Obtain and note down the UUID of the LUKS partition.
  260. #+BEGIN_SRC sh :results output :exports both
  261. cryptsetup --verbose luksUUID /dev/sdXY
  262. #+END_SRC>
  263. Open the encrypted partition, where "luks-uuid" is the LUKS UUID and
  264. “partname” is any desired name for partition. cryptsetup --verbose
  265. #+BEGIN_SRC sh :results output :exports both
  266. luksOpen UUID=luks-uuid partname
  267. #+END_SRC>
  268. Create a physical volume in the partition.
  269. #+BEGIN_SRC sh :results output :exports both
  270. pvcreate /dev/mapper/partname --verbose
  271. #+END_SRC>
  272. Create a volume group in the physical volume, where "vgname" is any desired name for volume group.
  273. #+BEGIN_SRC sh :results output :exports both
  274. vgcreate vgname /dev/mapper/partname --verbose
  275. #+END_SRC>
  276. Create logical volumes in the volume group; where "num" is the number
  277. for space in GB, and "lvnameroot" and "lvnamehome" are any desired
  278. names for root and home volumes respectively.
  279. #+BEGIN_SRC sh :results output :exports both
  280. lvcreate --extents 25%VG vgname --name lvnameroot --verbose
  281. lvcreate --extents 100%FREE vgname --name lvnamehome --verbose
  282. #+END_SRC>
  283. Create filesystems on the logical-volumes, where "fsnameroot" and
  284. "fsnamehome" are any desired names for root and home filesystems
  285. respectively.
  286. #+BEGIN_SRC sh :results output :exports both
  287. mkfs.btrfs --metadata dup --label fsnameroot /dev/vgname/lvnameroot
  288. mkfs.btrfs --metadata dup --label fsnamehome /dev/vgname/lvnamehome
  289. #+END_SRC>
  290. Mount the filesystems under the current system.
  291. #+BEGIN_SRC sh :results output :exports both
  292. mount --label fsnameroot --target /mnt --types btrfs --verbose
  293. mkdir --verbose /mnt/home && mount --label fsnamehome --target /mnt/home --types btrfs --verbose
  294. #+END_SRC>
  295. Create a swap file.
  296. #+BEGIN_SRC sh :results output :exports both
  297. dd bs=1MiB count=1GiB if=/dev/zero of=/mnt/swapfile status=progress
  298. mkswap --verbose /mnt/swapfile
  299. #+END_SRC>
  300. Make the swap file readable and writable only by root account.
  301. #+BEGIN_SRC sh :results output :exports both
  302. chmod --verbose 600 /mnt/swapfile
  303. #+END_SRC>
  304. Activate the swap file.
  305. #+BEGIN_SRC sh :results output :exports both
  306. swapon --verbose /mnt/swapfile
  307. #+END_SRC>
  308. Make the installation packages to be written on the mounted root
  309. filesystem.
  310. #+BEGIN_SRC sh :results output :exports both
  311. herd start cow-store /mnt
  312. #+END_SRC>
  313. Create the system-wide configuration files directory.
  314. #+BEGIN_SRC sh :results output :exports both
  315. mkdir --verbose /mnt/etc
  316. #+END_SRC>
  317. Create, edit and save the system configuration file by typing the
  318. following code snippet. WATCH-OUT for variables in the code snippet
  319. and replace them with the relevant values.
  320. #+BEGIN_SRC sh :results output :exports both
  321. nano /mnt/etc/config.scm
  322. #+END_SRC>
  323. Snippet:
  324. #+BEGIN_SRC scheme
  325. (use-modules
  326. (gnu)
  327. (gnu system nss))
  328. (use-package-modules
  329. certs
  330. gnome
  331. linux)
  332. (use-service-modules
  333. desktop
  334. xorg)
  335. (operating-system
  336. (kernel linux-libre-lts)
  337. (kernel-arguments
  338. (append
  339. (list
  340. "iomem=relaxed")
  341. %default-kernel-arguments))
  342. (bootloader
  343. (bootloader-configuration
  344. (bootloader
  345. (bootloader
  346. (inherit grub-bootloader)
  347. (installer #~(const #t))))
  348. (keyboard-layout keyboard-layout)))
  349. (keyboard-layout
  350. (keyboard-layout
  351. "xy"
  352. "altgr-intl"))
  353. (host-name "hostname")
  354. (mapped-devices
  355. (list
  356. (mapped-device
  357. (source
  358. (uuid "luks-uuid"))
  359. (target "partname")
  360. (type luks-device-mapping))
  361. (mapped-device
  362. (source "vgname")
  363. (targets
  364. (list
  365. "vgname-lvnameroot"
  366. "vgname-lvnamehome"))
  367. (type lvm-device-mapping))))
  368. (file-systems
  369. (append
  370. (list
  371. (file-system
  372. (type "btrfs")
  373. (mount-point "/")
  374. (device "/dev/mapper/vgname-lvnameroot")
  375. (flags '(no-atime))
  376. (options "space_cache=v2")
  377. (needed-for-boot? #t)
  378. (dependencies mapped-devices))
  379. (file-system
  380. (type "btrfs")
  381. (mount-point "/home")
  382. (device "/dev/mapper/vgname-lvnamehome")
  383. (flags '(no-atime))
  384. (options "space_cache=v2")
  385. (dependencies mapped-devices)))
  386. %base-file-systems))
  387. (swap-devices
  388. (list
  389. "/swapfile"))
  390. (users
  391. (append
  392. (list
  393. (user-account
  394. (name "username")
  395. (comment "Full Name")
  396. (group "users")
  397. (supplementary-groups '("audio" "cdrom" "kvm" "lp" "netdev" "tape" "video" "wheel"))))
  398. %base-user-accounts))
  399. (packages
  400. (append
  401. (list
  402. nss-certs)
  403. %base-packages))
  404. (timezone "Zone/SubZone")
  405. (locale "ab_XY.1234")
  406. (name-service-switch %mdns-host-lookup-nss)
  407. (services
  408. (append
  409. (list
  410. (service gnome-desktop-service-type))
  411. %desktop-services)))
  412. @end example
  413. Initialize new Guix System.
  414. #+BEGIN@math{_SRC} sh :results output :exports both
  415. guix system init /mnt/etc/config.scm /mnt
  416. #+END@math{_SRC}>
  417. Reboot the device.
  418. #+BEGIN@math{_SRC} sh :results output :exports both
  419. reboot
  420. #+END@math{_SRC}>
  421. @node Completion
  422. @section Completion
  423. On reboot, as soon as the Libreboot graphic art appears, press “C” to
  424. enter the command-line.
  425. Enter the following commands and respond to first command with the LUKS Key.
  426. #+BEGIN@math{_SRC} sh :results output :exports both
  427. cryptomount -u luks-uuid
  428. set root=(lvm/vgname-lvnameroot)
  429. #+END@math{_SRC}>
  430. Upon Guix's GRUB menu, go with the default option.
  431. Enter the LUKS Key again, for kernel, as prompted.
  432. Upon login screen, login as "root" with password field empty.
  433. Open terminal.
  434. Set passkey for the "root" user. Follow the prompts.
  435. #+BEGIN@math{_SRC} sh :results output :exports both
  436. passwd root
  437. #+END@math{_SRC}>
  438. Set passkey for the "username" user. Follow the prompts.
  439. #+BEGIN@math{_SRC} sh :results output :exports both
  440. passwd username
  441. #+END@math{_SRC}>
  442. Install flashrom and wget.
  443. #+BEGIN@math{_SRC} sh :results output :exports both
  444. guix package –-install flashrom wget
  445. #+END@math{_SRC}>
  446. Obtain the ROM chip's model and size. Look for the output line “Found
  447. [@dots{}] flash chip [@dots{}]”.
  448. #+BEGIN@math{_SRC} sh :results output :exports both
  449. flashrom --verbose --programmer internal
  450. #+END@math{_SRC}>
  451. Download Libreboot ROM and utilities, where "YYYYMMDD" is the release
  452. date, @code{devmod} is the device model and "N" is the ROM chip size.
  453. #+BEGIN@math{_SRC} sh :results output :exports both
  454. wget --verbose @uref{https://rsync.libreboot.org/stable/YYYYMMDD/rom/grub/libreboot_rYYYYMMDD_grub_devmod_Nmb.tar.xz}
  455. wget --verbose @uref{https://rsync.libreboot.org/stable/YYYYMMDD/libreboot_rYYYYMMDD_util.tar.xz}
  456. #+END@math{_SRC}>
  457. Extract the downloaded files.
  458. #+BEGIN@math{_SRC} sh :results output :exports both
  459. tar --extract --file=libreboot@math{_rYYYYMMDD}@math{_grub}@math{_devmod}@math{_Nmb.tar.xz} --verbose
  460. tar --extract --file=libreboot@math{_rYYYYMMDD}@math{_util.tar.xz} --verbose
  461. #+END@math{_SRC}>
  462. Rename the directories of extracted files.
  463. #+BEGIN@math{_SRC} sh :results output :exports both
  464. mv --verbose "libreboot@math{_rYYYYMMDD}@math{_grub}@math{_devmod}@math{_Nmb.tar.xz}" "libreboot@math{_rom}"
  465. mv --verbose "libreboot@math{_rYYYYMMDD}@math{_util}" "libreboot@math{_util}"
  466. #+END@math{_SRC}>
  467. Copy the ROM image to the directory of cbfstool, where "kbdlo" is the
  468. keyboard layout and "arch" is the system architecture.
  469. #+BEGIN@math{_SRC} sh :results output :exports both
  470. cp libreboot@math{_rom}/devmod@math{_Nmb}@math{_kbdlo}@math{_vesafb.rom} libreboot@math{_util}/cbfstool/arch/libreboot.rom
  471. #+END@math{_SRC}>
  472. Change directory to the directory of cbfstool.
  473. #+BEGIN@math{_SRC} sh :results output :exports both
  474. cd libreboot@math{_util}/cbfstool/arch/
  475. #+END@math{_SRC}>
  476. Extract the GRUB configuration file from the image.
  477. #+BEGIN@math{_SRC} sh :results output :exports both
  478. ./cbfstool libreboot.rom extract -n grub.cfg -f grub.cfg
  479. #+END@math{_SRC}>
  480. Edit the GRUB configuration file and insert the following code snippet
  481. above the line @code{“menuentry 'Load Operating System [o]' --hotkey='o'
  482. --unrestricted @{ [...] @}”}.
  483. #+BEGIN@math{_SRC} sh :results output :exports both
  484. nano grub.cfg
  485. #+END@math{_SRC}>
  486. Snippet:
  487. @example
  488. menuentry ‘Guix System (An advanced distribution of the GNU operating system) [g]’ --hotkey=’g’ --unrestricted
  489. @{
  490. cryptomount -u luks-uuid
  491. set root=(lvm/vgname-lvnameroot)
  492. configfile /boot/grub/grub.cfg
  493. @}
  494. @end example
  495. Remove the old GRUB configuration file from the ROM image.
  496. #+BEGIN@math{_SRC} sh :results output :exports both
  497. ./cbfstool libreboot.rom remove -n grub.cfg
  498. #+END@math{_SRC}>
  499. Insert the new GRUB configuration file into the ROM image.
  500. #+BEGIN@math{_SRC} sh :results output :exports both
  501. ./cbfstool libreboot.rom add -n grub.cfg -f grub.cfg -t raw
  502. #+END@math{_SRC}>
  503. Move the ROM image to the directory of ich9gen.
  504. #+BEGIN@math{_SRC} sh :results output :exports both
  505. mv libreboot.rom ~/libreboot@math{_util}/ich9deblob/arch/libreboot.rom
  506. #+END@math{_SRC}>
  507. Change directory to the directory of ich9gen.
  508. #+BEGIN@math{_SRC} sh :results output :exports both
  509. cd ~/libreboot@math{_util}/ich9deblob/arch/
  510. #+END@math{_SRC}>
  511. Generate descriptor+GbE images with the MAC address, where "mac-addr"
  512. is the MAC address of the machine.
  513. #+BEGIN@math{_SRC} sh :results output :exports both
  514. ich9gen --macaddress mac-addr
  515. #+END@math{_SRC}>
  516. Insert the descriptor+GbE image into the ROM image, where "N" is the
  517. ROM chip size.
  518. #+BEGIN@math{_SRC} sh :results output :exports both
  519. dd bs=12k conv=notrunc count=1 if=ich9fdgbe@math{_Nm.bin} of=libreboot.rom status=progress
  520. #+END@math{_SRC}>
  521. Move the ROM image to the directory of flash.
  522. #+BEGIN@math{_SRC} sh :results output :exports both
  523. mv libreboot.rom ~/libreboot@math{_util}/libreboot.rom
  524. #+END@math{_SRC}>
  525. Change directory to the directory of flash.
  526. #+BEGIN@math{_SRC} sh :results output :exports both
  527. cd ~/libreboot@math{_util}
  528. #+END@math{_SRC}>
  529. Modify the shebang of flash script, from `#!/bin/bash` to `#!/bin/sh`.
  530. #+BEGIN@math{_SRC} sh :results output :exports both
  531. nano flash
  532. #+END@math{_SRC}>
  533. Flash the ROM with the new image.
  534. #+BEGIN@math{_SRC} sh :results output :exports both
  535. ./flash update libreboot.rom
  536. #+END@math{_SRC}>
  537. (or)
  538. #+BEGIN@math{_SRC} sh :results output :exports both
  539. ./flash forceupdate libreboot.rom
  540. #+END@math{_SRC}>
  541. Reboot the device.
  542. #+BEGIN@math{_SRC} sh :results output :exports both
  543. reboot
  544. #+END@math{_SRC}>
  545. @node Conclusion
  546. @section Conclusion
  547. Everything should be stream-lined from now. Upon Libreboot's GRUB
  548. menu, you can either press "G" or choose "Guix System (An advanced
  549. distribution of the GNU operating system) [g]".
  550. During the boot process, as prompted, you have to type LUKS key twice;
  551. once for Libreboot's GRUB and once more for Linux-Libre kernel.
  552. Generally, you will be using Libreboot's initial/default grub.cfg,
  553. whose Guix menu-entry invokes Guix's grub.cfg located at
  554. @code{/boot/grub/}. For trouble-shooting, you can also use Libreboot's
  555. @code{grubtest.cfg}, which hasn't been modified.
  556. That is it! You have now setup Guix System with Full Disk Encryption on your device powered by Libreboot. Enjoy!
  557. @node References
  558. @section References
  559. [1] Guix manual (@uref{http://guix.gnu.org/manual/en/}).
  560. [2] Libreboot documentation (@uref{https://libreboot.org/docs/}).
  561. @node Acknowledgements
  562. @section Acknowledgements
  563. [1] Thanks to Guix developer, Clement Lassieur (clement@@lassieur.org),
  564. for helping me with the Scheme code for the bootloader configuration.
  565. [2] Thanks to Libreboot founder and developer, Leah Rowe
  566. (leah@@libreboot.org), for helping me with the understanding of
  567. Libreboot’s functionalities.
  568. @node License
  569. @section License
  570. This work by Raghav Gururajan is licensed under the Creative Commons
  571. Attribution-ShareAlike 4.0 International License.
  572. To view a copy of this license, visit
  573. @uref{https://creativecommons.org/licenses/by-sa/4.0/}
  574. @node Another section
  575. @chapter Another section
  576. Hello!
  577. @bye