This detailed tutorial explains what is Penguins-eggs, how to install Penguins-eggs in Linux and how to create installable ISO from your current Linux system with Penguins-eggs.
What is Penguins-eggs?
Penguins -eggs is a console utility that allows you to remaster your Linux system and create an installable ISO from the live system. Using Penguins-eggs, you can create both live and installable version of your current Linux machine, with or without user data.
Penguins-eggs creates a compressed filesystem from your current Linux system by removing user data and the users. You can then fully customize the resulting ISO with themes and addons to make it look like your own Linux distribution.
To put this in layman terms, you can backup your whole install, including all of your personal data (files, documents, PDFs, music, videos…etc), that is currently running right now on your internal SSD/HDD and create an ISO. You can put the ISO in your external USB and carry a live operating system. Just plug the USB, boot the ISO and start using your portable Linux operating system anywhere. It's that simple!
Penguins-eggs can be used for creating custom remixing distros, migrations, rebuilds, and hardware switching for all user cases in all organizations, companies, schools, colleges, and universities.
Please note that Penguins-eggs is not a disk cloning software like Clonezilla. It is completely different. Penguins-eggs can be directly run from the live/current system and snapshot the current state of your running Linux system. On the other hand, disk cloning software can be run from a bootable USB only.
Penguins-eggs is a great replacement for good-old Remastersys and other similar programs such as Pinguy Builder, Refracta, Systemback and Knoppix! Unfortunately, the development of Remastersys, Pinguy Builder, and Systemback has been stopped a long time ago. As far as I know, Penguins-eggs project is only the actively maintained project to remaster your current Linux system and redistribute it as a live ISO file (with or without user and system data).
Penguins-eggs is free, and opensource program written in Typescript. Currently, it supports Debian, Devuan, Ubuntu, Arch Linux and Manjaro Linux. It also supports the Ubuntu-derivatives such as Linux Mint, PopOS, Kubuntu, Lubuntu, Xubuntu, and KDE Neon etc.
Penguins-eggs ships with many useful features. Let us have quick glance of some important features of Penguins-eggs.
1. Include User Data
By default, the user data will be excluded while creating ISO. You can however use the
--clone flag to take the data with you.
2. Encrypt Data
If you use
--clone flag, the data will be visible directly from the live environment and accessible to anyone who gets the resulting ISO file. It is also possible to encrypt the user data and generate the ISO.
When creating the ISO with
--clonecrypted flag, the user data will be kept under an encrypted LUKS volume.
3. GUI or CLI Installer
Once the ISO is created, you can install the resulting ISO using either GUI Calamares installer or the internal TUI krill installer.
4. Unattended Installation
With krill installer, you can also perform an unattended installation using
--unattended flag. You can change configuration values in
/etc/penguins-eggs.d/krill.yaml before starting the unattended installation.
5. PXE Support
What if you want to deploy the ISO in other computers on the network? It is also possible too.
Penguins-eggs has a built-in PXE service. The self-configuring PXE service allows us to easily deploy the newly created ISO on a remote system on the network.
The PXE feature is made possible with a command named "cuckoo". This command is used to deploy the ISO on an already installed system or live booting the ISO itself.
6. Built-in Local Repository
The yet another useful feature of Penguins-eggs is local repository. The local repository is known as Yolk and included in the live cd. It contains a minimum of indispensable packages during installation. So, we can safely install our system without the need of an active internet connection. Sounds quite useful, yeah?
7. Built-in Assistants
Penguins-eggs is shipped with two built-in assistants namely "mom" and "dad".
The mom script is just a helper program to explain various commands and their options. And the dad script will help you to properly configure Penguins-eggs program.
To configure Penguins-eggs, simply type the following command and follow the on-screen instructions.
$ sudo eggs dad
If there are any issues, you can run the following command to reset everything:
$ sudo eggs dad -d
It will reset the configuration, load defaults, delete the created ISOs.
In summary, the following are some useful features of Penguins-eggs.
- Easily and quickly create an installable ISO from a running Linux distribution,
- Create backups of your current Linux system,
- Include or exclude user data from the ISO,
- Encrypt user data,
- Supports unattended installation,
- Deploy ISO on a networked computer via PXE service,
- Supports customizable GUI installer and CLI installer,
- Built-in local repository and help assistants,
- Removes itself from the new machine after installation,
- Free and Opensource!
Install Penguins-eggs in Linux
Penguins-eggs is packaged for a few major operating systems including Arch Linux and its variants, Debian, Ubuntu and its derivatives.
If you're on Arch Linux, EndeavourOS and Manjaro Linux, you can install Penguins-eggs from AUR using either Paru or Yay helper programs ash shown below.
$ paru -S penguins-eggs
$ yay -S penguins-eggs
On Debian, Ubuntu and its derivatives, you can install Penguins-eggs via its official PPA or manually download the
.deb package and install it using the package manager.
To install Penguins-eggs via PPA, add the GPG key and PPA using commands:
$ curl -fsSL https://pieroproietti.github.io/penguins-eggs-ppa/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/penguins-eggs.gpg
$ echo "deb [arch=$(dpkg --print-architecture)] https://pieroproietti.github.io/penguins-eggs-ppa ./" | sudo tee /etc/apt/sources.list.d/penguins-eggs.list > /dev/null
Update the package repositories:
$ sudo apt update
And then install Penguins-eggs in Debian-based systems using command:
$ sudo apt install eggs
If you don't want to add the PPA, download Penguins-eggs packages from Sourceforge:
$ wget https://sourceforge.net/projects/penguins-eggs/files/DEBS/eggs_9.4.2_amd64.deb
And then install the downloaded .deb package using
dpkg package manager.
$ sudo dpkg -i eggs_9.4.2_amd64.deb
$ sudo apt install -f
You can also install Penguins-eggs deb package using
gdebi package manager as well.
$ sudo apt install gdebi
$ sudo gdebi eggs_9.4.2_amd64.deb
If you are on a system UEFI, I recommend you to install one more package named grub-efi-amd64-bin.
To do so, run:
$ sudo apt install grub-efi-amd64
Well, we just installed Penguins-eggs.
Let us go ahead and see how to turn your current Linux system into an installable ISO using Penguins-eggs.
Create Installable ISO from Linux System with Penguins-eggs
Once penguins-eggs is installed, you can use the
eggs command to make a new ISO.
eggs command without any options to view the general help including list of the available sub-commands:
Perri's Brewery edition: remaster your system and distribute it VERSION penguins-eggs/9.4.2 linux-x64 node-v16.19.1 USAGE $ eggs [COMMAND] TOPICS export export deb/docs/iso to the destination host tools clean system log, apt, etc wardrobe get wardrobe COMMANDS adapt adapt monitor resolution for VM only analyze analyze for syncto autocomplete display autocomplete installation instructions calamares configure calamares or install or configure it config Configure and install prerequisites deb packages to run it cuckoo PXE start with proxy-dhcp dad ask help from daddy - TUI configuration helper help Display help for eggs. install krill: the CLI system installer - the egg became a penguin! kill kill the eggs/free the nest mom ask help from mommy - TUI helper produce produce a live image from your system without your data status information about eggs status syncfrom restore users and user data from a LUKS volumes syncto saves users and user data in a LUKS volume inside the iso update update the Penguins' eggs tool version
You can also view the help section of a specific sub-command. For instance, to display the help section of
eggs produce command, run:
$ eggs produce -h
You can hit the TAB key to view all the possible choices for each sub-command.
The more guided help can be retrieved by running the following command:
$ eggs mom
This will display a TUI menu-based interactive help section, so we can view the help section of all commands in a user-friendly format.
In addition, there is a dedicated manual page available for
eggs command. To view the man pages of
eggs command, run:
$ man eggs
Generate ISO from Live System without User Data
Generating installable ISO from a Linux system with Penguins-eggs is simple and straight-forward. All you have to do is just run the
eggs command to create an ISO from your live Linux system:
$ sudo eggs produce
Please keep an eye on the screen. Penguins-eggs will ask you a few YES/NO questions. Just use the UP/DOWN arrows to choose the appropriate answer.
Please note that if you're on graphical system, eggs will prompt you if you want to install the calamares gui installer. Choose "yes" using the arrow key and hit ENTER to continue installation.
After successful ISO creation, you will see the following output:
[...] eggs is finished! You can find the file iso: debian11vm_amd64_2023-03-16_1302.iso in the nest: /home/eggs/. Remember, on liveCD user = live/evolution root = root/evolution
By default, eggs will save the resulting ISO in /home/eggs directory. The default live cd username and password for the ISO is live/evolution and the root password for the live cd is evolution.
The eggs uses the default fast compression by default, which provides a faster compression speed, to generate the ISO.
You can also use
--standard for standard compression.
$ sudo eggs produce --standard
You can also add
--max flag to get more compressed ISOs. Please note that this process will be slower than standard and fast compression methods.
$ sudo eggs produce --max
As you may noticed in the above output, the ISO name would be derived from the hostname of your system. For example, my generated ISO name is
debian11vm_amd64_2023-03-16_1302.iso. What if you want to add a custom basename for your ISO? It is possible too. To add a basename for the ISO, run:
$ sudo eggs produce --basename=Debian11
Replace "Debian11" basename with your own.
Create ISO with User Data
When you run
eggs produce command without any options will create only the ISO. If you want to include the user data in the ISO, run
eggs command with
$ sudo eggs produce --clone
This will create an installable ISO with the user data UNENCRYPTED. So anyone who has access to the ISO can view the data.
Encrypt User Data
If you don't want others to view the user data, you can run
eggs command with
--cryptedclone option to encrypt the user data and save it in a LUKS volume in the ISO.
$ sudo eggs produce --cryptedclone
The encrypted user data is saved in a LUKS volume inside the live system. The data is not accessible on the live ISO. If you want to access the data, you should install your system with the ISO using the TUI krill installer. Please be mindful that the user data cannot be restored when using the graphical installer Calamares.
Test the ISO
After generating the ISO from your live system, you can test it by creating a bootable live USB with the ISO using any bootable ISO creation applications like Ventoy.
Boot your system with USB. You should see the following grub menu.
Choose either GUI or CLI installer and hit ENTER to continue booting the system. Finally, login with the default livecd user credentials.
You can use the following user credentials to login to your live system.
- LiveCD user: live
- LiveCD user password: evolution
- LiveCD root password: evolution
I am going to login as
Now you will be logged into the live system. I checked if all data is present in my Debian 11 live medium. Yes, they are!
I am skeptical at first try. But I am really pleased with the result. Penguins-eggs just works out of the box. I created live ISO with and without user data. When logging into the live ISO created with user data, I can able to see and access all the data. Everything is in the live medium. Honestly I didn't expect the positive result.
If you want to install the OS, simply start the installer from the menu/dash. To do so, just type "install" in the start menu and click "Install System" to start the installation.
That's it. Now continue the Debian 11 OS installation as usual.
eggs has many other useful commands too. To me, creating live ISO from my current system is enough! So I haven't tried the remaining commands yet. But I will test the remaining commands in the days to come. I suggest you to try all of them in a virtual machine and see if they help in your use-cases.
Change Default Configuration Settings
As stated already, you can use "
eggs dad" command to configure various Penguins-eggs settings such as live username and its password, root password, snapshot prefix, snapshot basename, GUI installer themes, time zone, and more.
You can also do the same from command line by editing
/etc/penguins-eggs.d/eggs.yaml file. Open this file in your favorite editor and change the values as per your liking.
version: 9.4.2 snapshot_dir: /home/eggs/ snapshot_prefix: egg-of-debian-bullseye- snapshot_excludes: /usr/local/share/penguins-eggs/exclude.list snapshot_basename: debian11vm user_opt: live user_opt_passwd: evolution root_passwd: evolution theme: eggs force_installer: true make_efi: true make_md5sum: false make_isohybrid: true compression: zstd -b 256K -Xcompression-level 1 ssh_pass: true timezone: America/New_York locales_default: en_IN locales: - en_IN - en_US.UTF-8 pmount_fixed: false machine_id: 57b38d32dd7a45f18c49301d559b3f27 vmlinuz: /boot/vmlinuz-5.10.0-21-amd64 initrd_img: /boot/initrd.img-5.10.0-21-amd64
After changing the values, save the file and close it. Restart the eggs program to take effect the changes.
To update Penguins-eggs, run:
$ sudo eggs update
You can also use your distribution's package manager to update it.
On Arch Linux and its variants, simply run the following command to update Penguins-eggs package:
$ paru -Syu
$ yay -Syu
If you're Debian/Ubuntu and installed Penguins-eggs via PPA, simply run:
$ sudo apt update
$ sudo apt full-upgrade
If you've installed manually using the .deb package, download the new version and install it again using
$ sudo dpkg -i eggs_x.x.x_amd64.deb
$ sudo apt install -f
gdebi package manager:.
$ sudo gdebi eggs_x.x.x_amd64.deb
In my humble opinion, Penguins-eggs is quite useful and a real replacement for the long-abandoned Remastersys and Systemback programs. I tried Penguins-eggs in my Debian 11 and Ubuntu 22.04 testing machines and it works well as advertised.
If you ever wanted to build a custom installable Linux ISO from your currently running system, Penguins-eggs would be a perfect choice. You can build a re-usable, custom Linux distribution with or without user data and deploy it on other systems.
Featured Image by Bülent Ergün from Pixabay.
great. Another useful package that only runs on Debian and derivatives. Has this guy ever heard of an AppImage (preferably)? Snap? Flatpak?
Useless to me on openSUSE…
It runs on Arch Linux and derivatives too. I really hope the author will release a flatpak/AppImage packages in future.
hello, I managed to create the ISO live but I wanted to install it directly on another machine on the hard disk; I no longer need to use the USB boot key. THANKS