simple way make linux livecd
use GNU Guix
GNU Guix can define whole system use scheme lisp.
make a simple config.scm
file config.scm:
(use-modules (gnu))(use-service-modules networking)(use-package-modules certs)(operating-system(host-name "livecd")(timezone "UTC")(locale "en_US.utf8");; this bootloader config will ignore by disk image generate.(bootloader (bootloader-configuration(bootloader grub-bootloader)(targets '("/dev/sdX"))));; this filesystem config will ignore by disk image generate.(file-systems (cons* (file-system(device (file-system-label "my-root"))(mount-point "/")(type "ext4"))%base-file-systems)) ; basic filesystem, such as /proc(users (cons* (user-account(name "guest")(comment "Guest")(group "users")(supplementary-groups '("audio" "video")))%base-user-accounts)) ; basic users, such as root, nobody(packages (cons* nss-certs ; tls certs%base-packages)) ; basic package, such as coreutils util-linux(services (cons* (service dhcp-client-service-type) ; dhcp client service%base-services))) ;; basic service, such as getty udev
add your packages
diff --git a/config.scm b/config.scmindex 0d7a449..f8eadab 100644--- a/config.scm+++ b/config.scm@@ -1,6 +1,6 @@(use-modules (gnu))(use-service-modules networking)-(use-package-modules certs)+(use-package-modules certs tmux emacs emacs-xyz w3m)(operating-system(host-name "livecd")@@ -27,6 +27,12 @@%base-user-accounts)) ; basic users, such as root, nobody(packages (cons* nss-certs ; tls certs+ tmux ; terminal mux+ emacs ; code editor+ emacs-rime ; input method plugin for emacs+ emacs-company ; autocomplete plugin for emacs+ emacs-geiser ; emacs scheme plugin+ w3m ; text web browser%base-packages)) ; basic package, such as coreutils util-linux(services (cons* (service dhcp-client-service-type) ; dhcp client service
add your services
diff --git a/config.scm b/config.scmindex f8eadab..480a9bb 100644--- a/config.scm+++ b/config.scm@@ -1,5 +1,5 @@(use-modules (gnu))-(use-service-modules networking)+(use-service-modules networking docker dbus)(use-package-modules certs tmux emacs emacs-xyz w3m)(operating-system@@ -36,4 +36,9 @@%base-packages)) ; basic package, such as coreutils util-linux(services (cons* (service dhcp-client-service-type) ; dhcp client service+ (service kmscon-service-type+ (kmscon-configuration+ (virtual-terminal "tty7"))) ; colorful terminal+ (dbus-service) ; use in kmscon+ (service tor-service-type) ; use for access internet%base-services))) ;; basic service, such as getty udev
add your home config file
you can define your home config file in skel:
mkdir ./skelcp $HOME/.bashrc ./skel/cp $HOME/.tmux.conf ./skel/mkdir ./skel/.emacs.d/cp $HOME/.emacs.d/init.el ./skel/emacs.d/init.el
diff --git a/config.scm b/config.scmindex 480a9bb..05f5a10 100644--- a/config.scm+++ b/config.scm@@ -25,6 +25,7 @@(group "users")(supplementary-groups '("audio" "video")))%base-user-accounts)) ; basic users, such as root, nobody+ (skeletons `(("." ,(local-file "./skel" "skel" #:recursive? #t))))(packages (cons* nss-certs ; tls certstmux ; terminal mux
add your data file
copy your data file:
mkdir ./datacp -r $HOME/music ./data/musicecho 'This is a livecd' > ./data/README
diff --git a/config.scm b/config.scmindex 05f5a10..7233379 100644--- a/config.scm+++ b/config.scm@@ -42,4 +42,10 @@(virtual-terminal "tty7"))) ; colorful terminal(dbus-service) ; use in kmscon(service tor-service-type) ; use for access internet+ (service special-files-service-type+ `(("/README" ,(local-file "./data/README" "README"))+ ("/etc/config.scm" ,(local-file "./config.scm"+ "config.scm"))+ ("/music" ,(local-file "./data/music" "music"+ #:recursive? #t))))%base-services))) ;; basic service, such as getty udev
test your config
boot up a virtual machine, use qemu.
`guix system vm config.scm` -m 2048
make bootable image
bootable disk image, use ext4 file system for root.
guix system image config.scm
bootable livecd image, use iso9660 file system for root.
guix system image -t iso9660 config.scm
other arch?, use this:
guix system image --system=i686-linux config.scm
more format:
guix system image --list-image-types