├── connect ├── bin ├── g4tagmove ├── g4removepw ├── g4tagadd ├── g4passwd ├── g4tagdel ├── g4eggs-log ├── g4clone ├── g4artisan └── g4alpine ├── fresh-eggs.png ├── TARBALLS ├── itsme.sh ├── requirements │ ├── ubuntu │ │ ├── README.md │ │ └── install.sh │ ├── openmamba │ │ ├── README.md │ │ └── install.sh │ ├── arch │ │ ├── README.md │ │ └── install.sh │ ├── opensuse │ │ ├── README.md │ │ └── install.sh │ ├── alpine │ │ ├── README.md │ │ └── install.sh │ ├── fedora │ │ ├── install.sh │ │ └── README.md │ ├── rocky │ │ ├── install.sh │ │ └── README.md │ └── README.md ├── get-tarball.sh ├── README.md ├── tarballs.sh ├── setup └── tarballs-renew ├── piero.proietti@gmail.com-66b8815d.rsa.pub ├── ensure-node18.sh ├── ensure-node20.sh ├── ensure-node22.sh ├── add-aur-chaotic.sh ├── prepare_pkgs.sh ├── distros.yaml ├── refresh-eggs.sh ├── README.md ├── refresh-basket.sh ├── fresh-eggs.sh └── SUPPORTED-DISTROS.md /connect: -------------------------------------------------------------------------------- 1 | ssh artisan@penguins-eggs.net 2 | -------------------------------------------------------------------------------- /bin/g4tagmove: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | g4tagdel $1 3 | g4tagadd $1 -------------------------------------------------------------------------------- /bin/g4removepw: -------------------------------------------------------------------------------- 1 | git config --global --unset credential.helper -------------------------------------------------------------------------------- /bin/g4tagadd: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git tag $1 3 | git push --tags 4 | -------------------------------------------------------------------------------- /bin/g4passwd: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git config --global credential.helper store 3 | -------------------------------------------------------------------------------- /bin/g4tagdel: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git tag -d $1 3 | git push --delete origin $1 4 | -------------------------------------------------------------------------------- /bin/g4eggs-log: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | eggs $1 $2 $3 $4 $5 --verbose | tee eggs-$1.log 3 | -------------------------------------------------------------------------------- /fresh-eggs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pieroproietti/fresh-eggs/HEAD/fresh-eggs.png -------------------------------------------------------------------------------- /bin/g4clone: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # git clone http://github.com/pieroproietti/$1 --depth 1 3 | git clone http://github.com/pieroproietti/$1 4 | 5 | -------------------------------------------------------------------------------- /bin/g4artisan: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git config --global user.email "piero.proietti@gmail.com" 3 | git config --global user.name "Piero Proietti" 4 | git config --global core.editor "nano" 5 | export EDITOR=nano 6 | 7 | 8 | -------------------------------------------------------------------------------- /TARBALLS/itsme.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ -z "$1" ]; then 3 | REQUIREMENTS="" 4 | else 5 | REQUIREMENTS="--requirements" 6 | fi 7 | 8 | rm -f penguins-eggs-tarball* 9 | scp artisan@192.168.1.2:/eggs/tarballs/penguins-eggs-tarball* . 10 | ./setup ./penguins-eggs-tarball* $REQUIREMENTS 11 | # 12 | rm -f penguins-eggs-tarball* 13 | -------------------------------------------------------------------------------- /TARBALLS/requirements/ubuntu/README.md: -------------------------------------------------------------------------------- 1 | # NAKED Ubuntu 2 | 3 | We start with `ubuntu-24.04.1-live-server-amd64.iso` our `prerequisites.sh` is the same as for Debian, plus we remove two packages for server: cloud-init and needrestart. 4 | 5 | All you must to do is run `sudo ./penguins-eggs/PREREQUISITES/ubuntu/install.sh` then `./penguins-eggs/install-eggs-dev.sh`. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TARBALLS/get-tarball.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ -z "$1" ]; then 3 | VERSION="10.1.1" 4 | else 5 | VERSION="$1" 6 | fi 7 | VERSIONS=$1 8 | 9 | VERSION="10.1.1-10" 10 | TAR_NAME="penguins-eggs_$VERSION-linux-x64.tar.gz" 11 | DOWNLOAD_PAGE="https://sourceforge.net/projects/penguins-eggs/files/Packages/tarballs/" 12 | wget -q -O "$TAR_NAME" "${DOWNLOAD_PAGE}/$TAR_NAME/download" 13 | 14 | 15 | -------------------------------------------------------------------------------- /TARBALLS/requirements/openmamba/README.md: -------------------------------------------------------------------------------- 1 | # OpenMamba 2 | 3 | I used `openmamba-livecd-light-it-snapshot-20241023.x86_64.iso` installation. 4 | 5 | After completed installation, just reboot, clone penguins-eggs, 6 | 7 | `cd penguins-eggs/PREREQUISITES/openmamba` 8 | 9 | `sudo ./PREREQUISITES/install.sh` 10 | 11 | then after finish, con in the main folder `~/penguins-eggs` and run `./install-eggs-dev.sh`. 12 | 13 | That's all! 14 | 15 | You can start producing your iso with: `eggs love` or dress it like a colibri using `eggs wardrobe get` and `sudo eggs wardrobe wear colibri 16 | 17 | -------------------------------------------------------------------------------- /TARBALLS/requirements/arch/README.md: -------------------------------------------------------------------------------- 1 | # NAKED arch 2 | Arch like debian has both a `penguins-eggs` package and a repository to keep it up to date. 3 | 4 | And as with Debian, it can be useful to use this during development. 5 | 6 | ## Procedure 7 | We start from a recent `archlinux-yyyy.mm.dd-x86_64.iso` image and just install it using `archinstall` or old style way. 8 | 9 | ## reboot 10 | After reboot just run `sudo ./PREREQUISITES/install.sh`, then after finish, con in the main folder `~/penguins-eggs` and run `./install-eggs-dev.sh`. 11 | 12 | That's all! 13 | 14 | You can start producing your iso with: `eggs love` or dress it like a colibri using `eggs wardrobe get` and `sudo eggs wardrobe wear colibri`. 15 | -------------------------------------------------------------------------------- /bin/g4alpine: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Extract the version number from package.json 4 | tab=$(node -pe "require('./package.json').version") 5 | 6 | # Check if the version number was successfully extracted 7 | if [ -z "$tab" ]; then 8 | echo "Failed to extract version number from package.json" 9 | exit 1 10 | fi 11 | 12 | # Delete the existing tag 13 | g4tagdel "$tab" 14 | 15 | # Check if the delete operation was successful 16 | if [ $? -ne 0 ]; then 17 | echo "Failed to delete tag $tab" 18 | exit 1 19 | fi 20 | 21 | # Add the new tag 22 | g4tagadd "$tab" 23 | 24 | # Check if the add operation was successful 25 | if [ $? -ne 0 ]; then 26 | echo "Failed to add tag $tab" 27 | exit 1 28 | fi 29 | 30 | echo "Tag operations completed successfully" -------------------------------------------------------------------------------- /TARBALLS/requirements/ubuntu/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # check if we are root 4 | if [ "$EUID" -ne 0 ] 5 | then echo "Please run as root" 6 | exit 7 | fi 8 | 9 | # check if we are on ubuntu 10 | if [ ! -f /etc/os-release ]; then 11 | echo "This script is only for Ubuntu" 12 | exit 13 | fi 14 | 15 | # install prerequisites 16 | apt-get install -y \ 17 | coreutils \ 18 | cryptsetup \ 19 | curl \ 20 | dosfstools \ 21 | dpkg-dev \ 22 | git \ 23 | jq \ 24 | live-boot \ 25 | live-boot-doc \ 26 | live-boot-initramfs-tools \ 27 | live-config-systemd \ 28 | live-tools \ 29 | lvm2 \ 30 | parted \ 31 | rsync \ 32 | squashfs-tools \ 33 | sshfs \ 34 | wget \ 35 | xorriso 36 | -------------------------------------------------------------------------------- /TARBALLS/requirements/openmamba/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # check if we are on openmamba 4 | if [ ! -f /etc/openmamba-release ]; then 5 | echo "This script is only for openmamba" 6 | exit 7 | fi 8 | 9 | 10 | # check if we are root 11 | if [ "$EUID" -ne 0 ] 12 | then echo "Please run as root" 13 | exit 14 | fi 15 | 16 | dnf install -y \ 17 | bash-completion \ 18 | cryptsetup \ 19 | curl \ 20 | device-mapper \ 21 | dmraid \ 22 | dosfstools \ 23 | dracut \ 24 | efibootmgr \ 25 | fuse \ 26 | git \ 27 | jq \ 28 | lvm2 \ 29 | nvme-cli \ 30 | parted \ 31 | rsync \ 32 | sshfs \ 33 | wget \ 34 | xdg-user-dirs \ 35 | xorriso \ 36 | zstd 37 | 38 | # 13 dicembre 2004, DVD boot but reset -------------------------------------------------------------------------------- /TARBALLS/requirements/opensuse/README.md: -------------------------------------------------------------------------------- 1 | # opensuse naked 2 | 3 | I used `openSUSE-Tumbleweed-DVD-x86_64-Snapshot20240820-Media.iso` minimal installation, choosing ext4 as filesystem. 4 | 5 | After completed installation, just reboot, clone penguins-eggs, 6 | 7 | `cd penguins-eggs/PREREQUISITES/opensudo` 8 | 9 | `sudo ./PREREQUISITES/install.sh` 10 | 11 | then after finish, con in the main folder `~/penguins-eggs` and run `./install-eggs-dev.sh`. 12 | 13 | That's all! 14 | 15 | You can start producing your iso with: `eggs love` or dress it like a colibri using `eggs wardrobe get` and `sudo eggs wardrobe wear colibri 16 | 17 | # my notes 18 | * added check if /etc/issue is a symlink; 19 | * the disks at the boot are looked from dmsetup, to solve just added ```dmsetup remove_all``` in sequence, before partition, 20 | 21 | -------------------------------------------------------------------------------- /TARBALLS/requirements/opensuse/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # check if we are on opensuse 4 | if [ ! -f /etc/os-release ]; then 5 | echo "This script is only for OpenSUSE" 6 | exit 7 | fi 8 | 9 | 10 | # check if we are root 11 | if [ "$EUID" -ne 0 ] 12 | then echo "Please run as root" 13 | exit 14 | fi 15 | 16 | zypper install -y \ 17 | bash \ 18 | bash-completion \ 19 | cryptsetup \ 20 | curl \ 21 | dosfstools \ 22 | dracut \ 23 | dracut-extra \ 24 | dracut-tools \ 25 | fuse \ 26 | git \ 27 | grub2-x86_64-efi \ 28 | jq \ 29 | lvm2 \ 30 | parted \ 31 | rsync \ 32 | shadow \ 33 | squashfs \ 34 | sshfs \ 35 | wget \ 36 | xdg-user-dirs \ 37 | xorriso 38 | 39 | # Enable uinput 40 | echo "uinput" | tee /etc/modules-load.d/uinput.conf 41 | -------------------------------------------------------------------------------- /piero.proietti@gmail.com-66b8815d.rsa.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoEnI2DGJ9c5Ayu/upxFC 3 | TjGsB1nbZsupUcxlm+5q71mR0jS+t45ou711yE6m4wZd8woWWXyPWkwhtYKFCjVn 4 | fhIuPo2QLyGbvW9n01/Qoe69kiOGnj3f5Co4HzWXHjgFsfZjpGORH+eqM/cZtRlw 5 | W+8BX+gpkDDhQLwTPX2RBF7xMzR08UaMGljCzvghla6GqqcUGVc0JGHGzrjFX54B 6 | HT3In2TJtd5CjasBYd6rcr3XrCbAGrN0837W1glBusMZ5QkreInaZ3+i5AYutO5c 7 | tP45LibKpa/nXRgp/KkKwB7cMwCOpPrvCCRRcKyXgeNUElH+LCeZEyd1BCyLLDnE 8 | Sj9GYy7bXNlWhXANXx61Dn5XIgvcRX2Hs8cI5eEX5OMb60oCjvop8qEbdqFPO8Fl 9 | kYevYV7Ja0Pb+FShcMTV+2zwZFvScIPeslIQ1KcA0yoSXVnYPTUEEAdvmsyt81HF 10 | 1XX5pa0wdvgiSLicfi7RzAnXAsq0If7LjgHBYr2ch9Rtc9pCWjMhJ4W1XRk/1EOI 11 | sIGx1NPjL1AN3ZEzh5o0hpHULRtwWmjo5pVJ+19sFTsAMLIBxqBrEw9gVuG2A0FA 12 | 7meUofeA5TOwe2CKGfEDSrhZ/2U6qqyoSn0kghJh67T3Xn3VbEBuAPn/rt+/3Vg9 13 | WmCOhq7heFiCa/+Wr+dItMcCAwEAAQ== 14 | -----END PUBLIC KEY----- 15 | -------------------------------------------------------------------------------- /TARBALLS/README.md: -------------------------------------------------------------------------------- 1 | # eggs tarballs 2 | 3 | Install penguins-eggs with a tarball, tested on almalinux, fedora, rockylinuz. 4 | 5 | 6 | ## Usage 7 | 8 | Download the tarball from [https://penguins-eggs.net/basket](https://penguins-eggs.net/basket/index.php?p=packages%2Ftarballs), then: 9 | 10 | * `git clone https://github.com/pieroproietti/fresh-eggs` 11 | * `cd fresh-eggs` 12 | * `./setup ~/Downloads/penguins-eggs_10.1.1-1-linux-x64.tar.gz` 13 | 14 | Although the setup command, is a simple bash script, it MUST be started as a common user, you must still have admin rights to do the installation. 15 | 16 | penguins-eggs will be installed under the `/opt/penguins-eggs/ ` directory. 17 | 18 | 19 | ## BUILD tarballs 20 | 21 | * `git clone https://github.com/pieroproietti/penguins-eggs` 22 | * `cd penguins-eggs` 23 | * `pnpm i` 24 | * `pnpm tarballs` 25 | * `./eggs export tarballs -c` 26 | -------------------------------------------------------------------------------- /TARBALLS/requirements/alpine/README.md: -------------------------------------------------------------------------------- 1 | # Alpine naked 2 | 3 | We start from the `alpine-standard-3.20.3-x86_64.iso` image, which is only 203 MB, and go to install alpine. 4 | 5 | Log as root without password, then install it: `setup-alpine`. 6 | 7 | just follow the instructions, choose `sys` as disk. 8 | 9 | > [!NOTE] 10 | > This is tested just on BIOS, under a VM on Proxmox VE. 11 | 12 | ## reboot 13 | The best is, after reboot, to connect via ssh to can copy and past the command. Then: 14 | 15 | ``` 16 | su 17 | ``` 18 | 19 | Now, from root we give the following commands: 20 | 21 | We add git, nano and lsb-release: 22 | 23 | ``` 24 | apk add git lsb-release nano 25 | chsh -s /bin/bash 26 | 27 | ``` 28 | 29 | ## Clone penguins-eggs 30 | 31 | ``` 32 | git clone https://github.com/pieroproietti/penguins-eggs 33 | ``` 34 | 35 | ## Install prerequisites 36 | ``` 37 | doas penguins-eggs/PREREQUISITES/alpine/install.sh 38 | 39 | ``` 40 | ## Install penguins-eggs 41 | ``` 42 | cd penguins-eggs 43 | pnpm i 44 | ./install-eggs-dev 45 | chsh -s /bin/bash 46 | 47 | ``` 48 | 49 | ## eggs love 50 | Now we can build our ISOs, just `eggs love`. 51 | -------------------------------------------------------------------------------- /ensure-node18.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function wait_for_apt { 4 | while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; do 5 | echo "Waiting for another process APT/DPKG to unlock..." 6 | sleep 5 7 | done 8 | } 9 | 10 | function ensure_node18() { 11 | NODE_MAJOR_VERSION="18" 12 | local available_versions 13 | available_versions=$(LANG=C apt-cache policy nodejs | awk '/Candidate:/ {print $2}' | cut -d'.' -f1) 14 | 15 | # refresh dei pacchetti 16 | wait_for_apt 17 | if ! apt update -qq; then 18 | exit 1 19 | fi 20 | 21 | title 22 | for version in $available_versions; do 23 | if [[ "$version" =~ ^[0-9]+$ ]] && [ "$version" -ge "$NODE_MAJOR_VERSION" ]; then 24 | echo "Package nodejs $version is available..." 25 | sleep 2 26 | return 0 27 | fi 28 | done 29 | 30 | # add nodesource repository 31 | echo "We need tp add nodejs>${NODE_MAJOR_VERSION} via nodesource repo" 32 | sleep 2 33 | wait_for_apt 34 | curl -fsSL "https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x" | bash - 35 | 36 | # free the LOCK before to end 37 | wait_for_apt 38 | } 39 | -------------------------------------------------------------------------------- /ensure-node20.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function wait_for_apt { 4 | while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; do 5 | echo "Waiting for another process APT/DPKG to unlock..." 6 | sleep 5 7 | done 8 | } 9 | 10 | function ensure_node20() { 11 | NODE_MAJOR_VERSION="20" 12 | local available_versions 13 | available_versions=$(LANG=C apt-cache policy nodejs | awk '/Candidate:/ {print $2}' | cut -d'.' -f1) 14 | 15 | # refresh dei pacchetti 16 | wait_for_apt 17 | if ! apt update -qq; then 18 | exit 1 19 | fi 20 | 21 | title 22 | for version in $available_versions; do 23 | if [[ "$version" =~ ^[0-9]+$ ]] && [ "$version" -ge "$NODE_MAJOR_VERSION" ]; then 24 | echo "Package nodejs $version is available..." 25 | sleep 2 26 | return 0 27 | fi 28 | done 29 | 30 | # add nodesource repository 31 | echo "We need tp add nodejs>${NODE_MAJOR_VERSION} via nodesource repo" 32 | sleep 2 33 | wait_for_apt 34 | curl -fsSL "https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x" | bash - 35 | 36 | # free the LOCK before to end 37 | wait_for_apt 38 | } 39 | -------------------------------------------------------------------------------- /ensure-node22.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | function wait_for_apt { 4 | while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; do 5 | echo "Waiting for another process APT/DPKG to unlock..." 6 | sleep 5 7 | done 8 | } 9 | 10 | function ensure_node22() { 11 | NODE_MAJOR_VERSION="22" 12 | local available_versions 13 | available_versions=$(LANG=C apt-cache policy nodejs | awk '/Candidate:/ {print $2}' | cut -d'.' -f1) 14 | 15 | # refresh dei pacchetti 16 | wait_for_apt 17 | if ! apt update -qq; then 18 | exit 1 19 | fi 20 | 21 | title 22 | for version in $available_versions; do 23 | if [[ "$version" =~ ^[0-9]+$ ]] && [ "$version" -ge "$NODE_MAJOR_VERSION" ]; then 24 | echo "Package nodejs $version is available..." 25 | sleep 2 26 | return 0 27 | fi 28 | done 29 | 30 | # add nodesource repository 31 | echo "We need tp add nodejs>${NODE_MAJOR_VERSION} via nodesource repo" 32 | sleep 2 33 | wait_for_apt 34 | curl -fsSL "https://deb.nodesource.com/setup_$NODE_MAJOR_VERSION.x" | bash - 35 | 36 | # free the LOCK before to end 37 | wait_for_apt 38 | } 39 | -------------------------------------------------------------------------------- /TARBALLS/requirements/arch/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This script installs prerequisites for penguins-eggs 4 | # on arch linux, it is intended for development purposes 5 | 6 | # check if the script is running as root 7 | if [ "$EUID" -ne 0 ]; then 8 | echo "Please run as root" 9 | exit 10 | fi 11 | 12 | # check if the script is running on arch linux 13 | if [ ! -f /etc/arch-release ]; then 14 | echo "This script is only for Arch Linux" 15 | exit 16 | fi 17 | 18 | pacman -Syu --noconfirm --needed \ 19 | arch-install-scripts \ 20 | bash-completion \ 21 | dosfstools \ 22 | erofs-utils \ 23 | findutils \ 24 | git \ 25 | grub \ 26 | jq \ 27 | libarchive \ 28 | libisoburn \ 29 | lvm2 \ 30 | mkinitcpio-archiso \ 31 | mkinitcpio-nfs-utils \ 32 | mtools \ 33 | nano \ 34 | nbd \ 35 | pacman-contrib \ 36 | parted \ 37 | procps-ng \ 38 | pv \ 39 | python \ 40 | rsync \ 41 | squashfs-tools \ 42 | sshfs \ 43 | syslinux \ 44 | wget \ 45 | xdg-utils \ 46 | xdg-user-dirs \ 47 | xorriso 48 | 49 | # mkdir /usr/share/icons 50 | mkdir -p /usr/share/icons 51 | 52 | # enable sudo for wheel group 53 | sed -i 's/# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/g' /etc/sudoers 54 | -------------------------------------------------------------------------------- /TARBALLS/tarballs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | source /etc/os-release 3 | 4 | FOUND=0 5 | case $ID in 6 | almalinux) 7 | FOUND=1 8 | ;; 9 | fedora) 10 | FOUND=1 11 | ;; 12 | nobara) 13 | FOUND=1 14 | ;; 15 | opensuse) 16 | FOUND=1 17 | ;; 18 | rocky) 19 | FOUND=1 20 | ;; 21 | esac 22 | 23 | VERSION="10.1.1-10" 24 | DOWNLOAD_PAGE="https://sourceforge.net/projects/penguins-eggs/files/Packages/tarballs/" 25 | 26 | clear 27 | if [[ $FOUND == 1 ]]; then 28 | echo ">> fresh-eggs: OK, is $ID, penguins-eggs can be installed" 29 | echo "" 30 | echo "First: if SELINUX is enbled, disable it, and reboot;" 31 | echo "" 32 | echo "- edit /etc/selinux/conf, add the line SELINUX=disabled at the end" 33 | echo "- reboot" 34 | echo "" 35 | echo "Install requirements:" 36 | echo "sudo tarballs/requirements/$ID/install.sh" 37 | echo "" 38 | echo "Download penguins-eggs_$VERSION-linux-x64.tar.gz from " 39 | echo "" 40 | echo "Install penguins-eggs:" 41 | echo "tarballs/setup ~/Downloads/penguins-eggs_$VERSION-linux-x64.tar.gz from $DOWNLOAD_PAGE" 42 | echo "" 43 | echo "enjoy it!" 44 | else 45 | echo ">> fresh-eggs: is $ID, penguins-eggs install the package" 46 | fi 47 | -------------------------------------------------------------------------------- /TARBALLS/requirements/fedora/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This script installs prerequisites for penguins-eggs 4 | # on fedora linux, it is intended for development purposes 5 | 6 | # check if we are root 7 | if [ "$(id -u)" -ne 0 ]; then 8 | echo "This script must be run as root" 9 | exit 1 10 | fi 11 | 12 | # check if we are on fedora or NobaraLinux 13 | if [ ! -f /etc/fedora-release ]; then 14 | if [ ! -f /etc/nobara-release ]; then 15 | if [ ! -f /etc/openmamba-release ]; then 16 | echo "This script is intended for fedora, nobara or openmamba!" 17 | exit 1 18 | fi 19 | fi 20 | fi 21 | 22 | # update 23 | dnf -y update 24 | 25 | dnf -y --no-best install \ 26 | bash-completion \ 27 | cryptsetup \ 28 | curl \ 29 | device-mapper \ 30 | dosfstools \ 31 | dracut \ 32 | dracut-live \ 33 | efibootmgr \ 34 | fuse \ 35 | git \ 36 | grub2-efi-x64 \ 37 | grub2-efi-x64-modules \ 38 | grub2-tools-extra \ 39 | jq \ 40 | lvm2 \ 41 | nvme-cli \ 42 | overlayfs-tools \ 43 | parted \ 44 | rsync \ 45 | shim \ 46 | squashfs-tools \ 47 | systemd-boot \ 48 | sshfs \ 49 | wget \ 50 | xdg-user-dirs \ 51 | xorriso \ 52 | zstd 53 | 54 | # mkdir /usr/share/icons 55 | mkdir -p /usr/share/icons 56 | 57 | # disable selinux 58 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 59 | 60 | 61 | # Rimosso dmrain 20250525 -------------------------------------------------------------------------------- /add-aur-chaotic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================================================== 4 | # Install chaotic-aur repo: only for ArchLinux, EndeavourOS, etc 5 | # ============================================================================== 6 | 7 | function main { 8 | is_arch 9 | is_aur 10 | 11 | echo "" 12 | echo ">> fresh-eggs: add spare tools..." 13 | echo "" 14 | pacman -S bash-completion \ 15 | dialog \ 16 | man-db \ 17 | nano \ 18 | openssh \ 19 | wget 20 | 21 | echo "" 22 | echo ">> fresh-eggs: add AUR repository..." 23 | echo "" 24 | echo 25 | pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com 26 | pacman-key --lsign-key 3056513887B78AEB 27 | pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst' 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst' 28 | echo "[chaotic-aur]" >> /etc/pacman.conf 29 | echo "Include = /etc/pacman.d/chaotic-mirrorlist" >> /etc/pacman.conf 30 | 31 | echo "" 32 | echo ">> fresh-eggs: Installing penguins-eggs..." 33 | echo "" 34 | pacman -Sy penguins-eggs 35 | 36 | echo "" 37 | read -rp ">> fresh-eggs: press a key to edit /etc/sudoers" 38 | echo "" 39 | export EDITOR=nano 40 | visudo 41 | 42 | eggs dad -d 43 | 44 | echo ">> fresh-eggs: finished! You can remove it" 45 | } 46 | 47 | main 48 | -------------------------------------------------------------------------------- /TARBALLS/requirements/rocky/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # This script installs prerequisites for penguins-eggs 4 | # on fedora linux, it is intended for development purposes 5 | 6 | # check if we are root 7 | if [ "$(id -u)" -ne 0 ]; then 8 | echo "This script must be run as root" 9 | exit 1 10 | fi 11 | 12 | # check if we are on rocky or almalinux 13 | if [ ! -f /etc/rocky-release ]; then 14 | if [ ! -f /etc/almalinux-release ]; then 15 | echo "This script is intended for rockylinux or almalinux!" 16 | exit 1 17 | fi 18 | fi 19 | 20 | 21 | 22 | # add epel-release 23 | dnf -y install epel-release 24 | 25 | # enable crb 26 | dnf config-manager --set-enabled crb 27 | 28 | # update 29 | dnf -y update 30 | 31 | # enable crb 32 | dnf config-manager --set-enabled crb 33 | 34 | dnf -y install \ 35 | bash-completion \ 36 | cryptsetup \ 37 | curl \ 38 | device-mapper \ 39 | dosfstools \ 40 | dracut \ 41 | dracut-live \ 42 | efibootmgr \ 43 | fuse \ 44 | git \ 45 | grub2-efi-x64 \ 46 | grub2-efi-modules \ 47 | grub2-efi-x64-modules \ 48 | grub2-tools-extra \ 49 | jq \ 50 | lvm2 \ 51 | nvme-cli \ 52 | parted \ 53 | rsync \ 54 | shim \ 55 | squashfs-tools \ 56 | sshfs \ 57 | tar \ 58 | wget \ 59 | xdg-user-dirs \ 60 | xorriso \ 61 | zstd 62 | 63 | # mkdir /usr/share/icons 64 | mkdir -p /usr/share/icons 65 | 66 | # disable selinux 67 | sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 68 | -------------------------------------------------------------------------------- /TARBALLS/requirements/README.md: -------------------------------------------------------------------------------- 1 | # PREREQUISITES 2 | 3 | It is possible to install penguins-eggs from zero without a native package. 4 | 5 | This way is a need for: alpine, fedora and opensuse - where we don't have yet a package - but can be used with all distros and indicate for developers. 6 | 7 | The main limit is: in a system created with this procedure, penguins-eggs can be updated just with the same procedure, becouse package manager don't know it at all. 8 | 9 | But this way is very pratical during development, no need to build the package and test it, this is sometime long enought, tedius and unpratical when we are developing, there are specialists. 10 | 11 | # INSTALLATION 12 | 13 | We must just to know the name of our distro. then: 14 | 15 | ``` 16 | git clone https://github.com/pieroproietti/penguins-eggs 17 | cd ~/penguins-eggs 18 | sudo PREREQUISITES//install.sh 19 | ./install-dev-eggs 20 | ``` 21 | 22 | On Alpine, after installation, change your shell on bash if you want autocomplete: `chsh -s /bin/bash`. 23 | 24 | # Produce your first live 25 | Using this way, on mostly distros, we need to give: `sudo eggs dad --default` to create the configuration files, then we are one step from our ISO: `eggs love`. 26 | 27 | Of course there is much more again to tell, consult this [repo](https://github.com/pieroproietti/penguins-eggs) and [penguins-eggs.net](https://penguins-eggs.net). 28 | 29 | # That's all, Folks! 30 | 31 | One of the standout features of Penguins' Eggs is its hassle-free setup. It comes with all the necessary configurations, making it a convenient choice for users. Just like in real life, the magic of Penguins' Eggs lies within - no additional setup required! 32 | -------------------------------------------------------------------------------- /TARBALLS/requirements/fedora/README.md: -------------------------------------------------------------------------------- 1 | # Fedora naked 2 | 3 | We start from the `Fedora-Everything-netinst-x86_64-40-1.14.iso` image, which is 765M, and go to install Fedora choosing minimun installation, set root password and user. 4 | 5 | On `Software selection` select "minimun installation" and confirm with button "Done" up on right. 6 | 7 | Then on `Installation destination` select the disk. I used a 32G disk, choose the third option advanced custom, then press "Done". On the GUI disk partition, create a minimal partition - just 1M - FOLDER `bootBIOS`, then add the remain space to a / partition format ext4. Press "Done" again and accept changes. 8 | 9 | We can create user `artisan` and choose a password and press "Done" to finish. 10 | 11 | At this point the button "Begin installation" bottom right is enabled, press it to confirm. 12 | 13 | The installation will start, is not exactly short. At the end will be enabled a buttom on bottom right to reboot. 14 | 15 | > [!NOTE] 16 | > This is tested just on BIOS, under a VM on Proxmox VE. 17 | 18 | ## rename host 19 | Our installed system is not named now, we can name it, I use in case of CLI minimun system the name `naked`. 20 | 21 | ``` 22 | sudo nano /etc/hostname 23 | ``` 24 | 25 | then, add a line: 26 | ``` 27 | 127.0.1.1 naked 28 | ``` 29 | to `\etc\hosts`. 30 | 31 | ## Disable selinux 32 | Edit `/etc/selinux/config` and replace `SELINUX=enforced` with `SELINUX=disabled`. 33 | 34 | ## reboot 35 | reboot. 36 | 37 | ## install eggs 38 | First we clone penguins-eggs repository. 39 | 40 | ``` 41 | git clone https://github.com/pieroproietti/penguins-eggs 42 | ``` 43 | 44 | Then we install prerequisites: 45 | ``` 46 | cd ~/penguins-eggs/PREREQUISITES/fedora 47 | sudo ./install.sh 48 | ``` 49 | At this point, we transpile and install penguins-eggs: 50 | ``` 51 | cd ~/penguins-eggs 52 | pnpm i 53 | ./install-eggs-dev 54 | ``` 55 | ## Create our first image 56 | 57 | When finish, we can just run: ```eggs love``` and build our first fedora naked ISO. 58 | 59 | It's installable and reproductive: once installed you can produce a live system from your installed one, just running: `eggs love`. 60 | 61 | 62 | -------------------------------------------------------------------------------- /prepare_pkgs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function not_supported { 4 | echo "Your distribution ($PRETTY_NAME) is not supported." >&2 5 | exit 1 6 | } 7 | 8 | 9 | function prepare_aur { 10 | FOLDER="aur" 11 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}-any.pkg.tar.zst") 12 | INSTALL_CMDS=("pacman -U --noconfirm /tmp/${PACKAGES[0]}") 13 | } 14 | 15 | function prepare_alpine { 16 | FOLDER="alpine/x86_64" 17 | PACKAGES=( 18 | "penguins-eggs-${LAST_VERSION}-r${LAST_RELEASE}.apk" 19 | "penguins-eggs-bash-completion-${LAST_VERSION}-r${LAST_RELEASE}.apk" 20 | "penguins-eggs-doc-${LAST_VERSION}-r${LAST_RELEASE}.apk" 21 | ) 22 | INSTALL_CMDS=("apk add --allow-untrusted /tmp/${PACKAGES[0]} /tmp/${PACKAGES[1]} /tmp/${PACKAGES[2]}") 23 | } 24 | 25 | function prepare_debs { 26 | FOLDER="debs" 27 | ARCHITECTURE=$(dpkg --print-architecture) 28 | PACKAGES=("penguins-eggs_${LAST_VERSION}-${LAST_RELEASE}_${ARCHITECTURE}.deb") 29 | # in debian -y va dopo! 30 | INSTALL_CMDS=( 31 | "apt-get install /tmp/${PACKAGES[0]} -y" 32 | ) 33 | } 34 | 35 | function prepare_fedora_or_el9 { 36 | if [[ "$VERSION_ID" == 9* ]]; then 37 | FOLDER="el9" 38 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}.el9.x86_64.rpm") 39 | INSTALL_CMDS=("dnf install -y /tmp/${PACKAGES[0]}") 40 | else 41 | FOLDER="fedora" 42 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}.fc42.x86_64.rpm") 43 | INSTALL_CMDS=("dnf install -y /tmp/${PACKAGES[0]}") 44 | fi 45 | } 46 | 47 | function prepare_manjaro { 48 | FOLDER="manjaro" 49 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}-any.pkg.tar.zst") 50 | INSTALL_CMDS=("pacman -U --noconfirm /tmp/${PACKAGES[0]}") 51 | } 52 | 53 | function prepare_openmamba { 54 | FOLDER="openmamba" 55 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}mamba.x86_64.rpm") 56 | INSTALL_CMDS=("dnf install /tmp/${PACKAGES[0]}") 57 | } 58 | 59 | 60 | function prepare_opensuse { 61 | FOLDER="opensuse" 62 | PACKAGES=("penguins-eggs-${LAST_VERSION}-${LAST_RELEASE}.opensuse.x86_64.rpm") 63 | INSTALL_CMDS=("zypper --non-interactive install --allow-unsigned-rpm /tmp/${PACKAGES[0]}") 64 | } 65 | -------------------------------------------------------------------------------- /TARBALLS/requirements/rocky/README.md: -------------------------------------------------------------------------------- 1 | # RockyLinux/AlmaLinux 2 | 3 | We start from the `Rocky-9.4-x86_64-minimal.iso` or `Almalinux-9.4-x86_64-minimal.iso` image, which are 1,7G, and go to install choosing minimun installation, set root password and user. 4 | 5 | On `Software selection` select "minimun installation" and confirm with button "Done" up on right. 6 | 7 | Then on `Installation destination` select the disk. I used a 32G disk, choose the third option advanced custom, then press "Done". On the GUI disk partition, create a minimal partition - just 1M - FOLDER `bootBIOS`, then add the remain space to a / partition format ext4. Press "Done" again and accept changes. 8 | 9 | We can create user `artisan` and choose a password and press "Done" to finish. 10 | 11 | At this point the button "Begin installation" bottom right is enabled, press it to confirm. 12 | 13 | The installation will start, is not exactly short. At the end will be enabled a buttom on bottom right to reboot. 14 | 15 | > [!NOTE] 16 | > This is tested just on BIOS, under a VM on Proxmox VE. 17 | 18 | ## rename host 19 | Our installed system is not named now, we can name it, I use in case of CLI minimun system the name `naked`. 20 | 21 | ``` 22 | sudo nano /etc/hostname 23 | ``` 24 | 25 | then, add a line: 26 | ``` 27 | 127.0.1.1 naked 28 | ``` 29 | to `/etc/hosts`. 30 | 31 | ## Disable selinux 32 | Edit `/etc/selinux/config` and replace `SELINUX=enforced` with `SELINUX=disabled`. 33 | 34 | ## reboot 35 | reboot. 36 | 37 | ## install eggs 38 | First we clone penguins-eggs repository. 39 | 40 | ``` 41 | git clone https://github.com/pieroproietti/penguins-eggs 42 | ``` 43 | 44 | Then we install prerequisites: 45 | ``` 46 | cd ~/penguins-eggs/PREREQUISITES/rockylinux 47 | ``` 48 | 49 | first, we need to enable nodesource repo for nodejs >10, just `sudo ./nodesource_setup.sh`. 50 | 51 | Then we can install the prerequisites: 52 | ``` 53 | sudo ./install.sh 54 | ``` 55 | 56 | At this point, we transpile and install penguins-eggs: 57 | ``` 58 | cd ~/penguins-eggs 59 | pnpm i 60 | ./install-eggs-dev 61 | ``` 62 | ## Create our first image 63 | 64 | When finish, we can just run: ```eggs love``` and build our first fedora naked ISO. 65 | 66 | It's installable and reproductive: once installed you can produce a live system from your installed one, just running: `eggs love`. 67 | -------------------------------------------------------------------------------- /TARBALLS/requirements/alpine/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/ash 2 | 3 | # This script installs prerequisites for penguins-eggs 4 | # on alpine linux, it is intended for development purposes 5 | # only 6 | 7 | # check if we are root 8 | if [ "$(id -u)" -ne 0 ]; then 9 | echo "This script must be run as root" 10 | exit 1 11 | fi 12 | 13 | # check if we are on alpine 14 | if [ ! -f /etc/alpine-release ]; then 15 | echo "This script is intended for alpine linux only" 16 | exit 1 17 | fi 18 | 19 | # controlla la release 20 | if [ "$(lsb_release -rs)" != "3.20.3" ]; then 21 | echo "This script is intended for alpine 3.20.3 only" 22 | exit 1 23 | fi 24 | 25 | # copy on /etc/apk/repositories 26 | cat < /etc/apk/repositories 27 | #/media/cdrom/apks 28 | http://dl-cdn.alpinelinux.org/alpine/v3.20/main 29 | http://dl-cdn.alpinelinux.org/alpine/v3.20/community 30 | @testing https://dl-cdn.alpinelinux.org/alpine/edge/testing 31 | @edge https://dl-cdn.alpinelinux.org/alpine/edge/community 32 | EOF 33 | 34 | # update 35 | apk update 36 | 37 | # install-prerequisites 38 | apk add \ 39 | alpine-conf \ 40 | apk-tools \ 41 | bash-completion \ 42 | cryptsetup \ 43 | curl \ 44 | docs \ 45 | dosfstools \ 46 | fuse \ 47 | git \ 48 | jq \ 49 | lsblk \ 50 | lvm2 \ 51 | man-pages \ 52 | mandoc \ 53 | mandoc-apropos \ 54 | mkinitfs \ 55 | musl-locales \ 56 | musl-utils \ 57 | nano \ 58 | npm \ 59 | parted \ 60 | rsync \ 61 | shadow \ 62 | squashfs-tools \ 63 | sshfs \ 64 | wget \ 65 | xdg-user-dirs \ 66 | xorriso 67 | 68 | # fuse 69 | echo "fuse" | tee /etc/modules-load.d/fuse.conf 70 | 71 | # create dirs 72 | mkdir /usr/share/icons 73 | mkdir /usr/share/applications 74 | 75 | # ln sudo 76 | ln -s /usr/bin/doas /usr/bin/sudo 77 | 78 | # install grub 79 | apk add \ 80 | grub \ 81 | grub-bios \ 82 | grub-efi \ 83 | efibootmgr 84 | 85 | grub-install /dev/sda 86 | 87 | # bash 88 | chsh -s /bin/bash 89 | 90 | # create /usr/sbin/shutdown 91 | if [ ! -e /usr/sbin/shutdown ]; then 92 | echo "creating /usr/sbin/shutdown" 93 | cat << 'EOF' > /tmp/shutdown 94 | #!/usr/bin/env bash 95 | /sbin/poweroff 96 | EOF 97 | chmod +x /tmp/shutdown 98 | mv /tmp/shutdown /usr/sbin 99 | fi 100 | -------------------------------------------------------------------------------- /distros.yaml: -------------------------------------------------------------------------------- 1 | distros: 2 | # Famiglia Debian 3 | 4 | - name: Debian 5 | id: debian 6 | version_id: "12" 7 | version_codename: bookworm 8 | 9 | - name: Devuan 10 | id: devuan 11 | id_like: [debian] 12 | version_id: "5" 13 | version_codename: daedalus 14 | debian_codename: bookworm 15 | 16 | - name: Ubuntu 17 | id: ubuntu 18 | id_like: [debian] 19 | version_id: "24.04" 20 | version_codename: noble 21 | 22 | - name: Pop!_OS 23 | id: pop 24 | id_like: [ubuntu, debian] 25 | version_id: "22.04" 26 | version_codename: jammy 27 | 28 | - name: Linux Mint 29 | id: linuxmint 30 | id_like: [ubuntu] 31 | version_id: "22" 32 | version_codename: wilma 33 | 34 | - name: LMDE 35 | id: lmde 36 | id_like: [debian] 37 | version_id: "6" 38 | version_codename: faye 39 | 40 | # Famiglia Fedora/RHEL 41 | - name: Fedora 42 | id: fedora 43 | version_id: "42" 44 | 45 | - name: RHEL 46 | id: rhel 47 | id_like: [fedora] 48 | version_id: "9.4" 49 | version_codename: Plow 50 | 51 | - name: AlmaLinux 52 | id: almalinux 53 | id_like: [rhel, fedora] 54 | version_id: "9.4" 55 | version_codename: Plow 56 | 57 | - name: Rocky Linux 58 | id: rocky 59 | id_like: [rhel, fedora] 60 | version_id: "9.4" 61 | version_codename: Blue Onyx 62 | 63 | # Famiglia Arch 64 | - name: Arch Linux 65 | id: arch 66 | 67 | - name: EndeavourOS 68 | id: endeavouros 69 | id_like: [arch] 70 | 71 | - name: Manjaro 72 | id: manjaro 73 | id_like: [arch] 74 | version_id: "24.0" 75 | 76 | - name: BigLinux 77 | id: biglinux 78 | id_like: [manjaro, arch] 79 | version_id: "2024-06-08" 80 | 81 | # Famiglia SUSE 82 | - name: SLES 83 | id: sles 84 | id_like: [suse] 85 | version_id: "15-SP7" 86 | 87 | - name: openSUSE Leap 88 | id: opensuse-leap 89 | id_like: [suse, opensuse] 90 | version_id: "15.6" 91 | 92 | - name: openSUSE Tumbleweed 93 | id: opensuse-tumbleweed 94 | id_like: [suse, opensuse] 95 | version_id: "20250724" 96 | 97 | - name: openSUSE Slowroll 98 | id: opensuse-slowroll 99 | id_like: [suse, opensuse] 100 | version_id: "20250721" 101 | 102 | # Famiglia Source-Based 103 | - name: Gentoo 104 | id: gentoo 105 | 106 | # Altre 107 | - name: Alpine Linux 108 | id: alpine 109 | version_id: "3.20.1" -------------------------------------------------------------------------------- /refresh-eggs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================================================== 4 | # Script di installazione per penguins-eggs 5 | # - Rileva la distribuzione 6 | # - Definisce i pacchetti da scaricare e i comandi da eseguire 7 | # - Esegue il download e l'installazione in un unico flusso 8 | # ============================================================================== 9 | 10 | # --- Variabili Globali --- 11 | SOURCE="/var/www/html/repos" 12 | DEST="/eggs/" 13 | 14 | # remove all 15 | rm -fr $DEST 16 | 17 | # Alpine 18 | DEST_ALPINE="${DEST}/alpine/x86_64" 19 | DEST_AUR="${DEST}/aur" 20 | DEST_DEBS="${DEST}/debs" 21 | DEST_EL9="${DEST}/el9" 22 | DEST_FEDORA="${DEST}/fedora" 23 | DEST_MANJARO="${DEST}/manjaro" 24 | DEST_OPENSUSE="${DEST}/opensuse" 25 | 26 | # Crea struttura 27 | mkdir -p ${DEST_ALPINE} 28 | mkdir -p ${DEST_AUR} 29 | mkdir -p ${DEST_DEBS} 30 | mkdir -p ${DEST_EL9} 31 | mkdir -p ${DEST_FEDORA} 32 | mkdir -p ${DEST_MANJARO} 33 | mkdir -p ${DEST_OPENSUSE} 34 | 35 | 36 | # --- Alpine --- 37 | # Cerca e copia l'ultimo pacchetto base (il [0-9] esclude -doc e -bash-completion) 38 | LAST_ALPINE_BASE=$(ls ${SOURCE}/alpine/penguins-eggs-[0-9]*.apk | sort -V | tail -n 1) 39 | cp "${LAST_ALPINE_BASE}" "${DEST_ALPINE}" 40 | 41 | # Cerca e copia l'ultimo pacchetto bash-completion 42 | LAST_ALPINE_BASH=$(ls ${SOURCE}/alpine/penguins-eggs-bash-completion*.apk | sort -V | tail -n 1) 43 | cp "${LAST_ALPINE_BASH}" "${DEST_ALPINE}" 44 | 45 | # Cerca e copia l'ultimo pacchetto doc 46 | LAST_ALPINE_DOC=$(ls ${SOURCE}/alpine/penguins-eggs-doc*.apk | sort -V | tail -n 1) 47 | cp "${LAST_ALPINE_DOC}" "${DEST_ALPINE}" 48 | 49 | # --- Arch --- 50 | LAST_AUR=$(ls ${SOURCE}/arch/penguins-eggs*.pkg.tar.zst | sort -V | tail -n 1) 51 | cp "${LAST_AUR}" "${DEST_AUR}" 52 | 53 | # --- Debian --- 54 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*amd64.deb | sort -V | tail -n 1) 55 | cp "${LAST_DEB}" "${DEST_DEBS}" 56 | 57 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*arm64.deb | sort -V | tail -n 1) 58 | cp "${LAST_DEB}" "${DEST_DEBS}" 59 | 60 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*i386.deb | sort -V | tail -n 1) 61 | cp "${LAST_DEB}" "${DEST_DEBS}" 62 | 63 | # --- EL9 (RHEL/Rocky/Alma) --- 64 | LAST_EL9=$(ls ${SOURCE}/rpm/el9/penguins-eggs*.rpm | sort -V | tail -n 1) 65 | cp "${LAST_EL9}" "${DEST_EL9}" 66 | 67 | # --- Fedora --- 68 | LAST_FEDORA=$(ls ${SOURCE}/rpm/fedora/42/penguins-eggs*.rpm | sort -V | tail -n 1) 69 | cp "${LAST_FEDORA}" "${DEST_FEDORA}" 70 | 71 | # --- Manjaro --- 72 | LAST_MANJARO=$(ls ${SOURCE}/manjaro/penguins-eggs*.pkg.tar.zst | sort -V | tail -n 1) 73 | cp "${LAST_MANJARO}" "${DEST_MANJARO}" 74 | 75 | # --- openSUSE --- 76 | LAST_OPENSUSE=$(ls ${SOURCE}/rpm/opensuse/leap/penguins-eggs*.rpm | sort -V | tail -n 1) 77 | cp "${LAST_OPENSUSE}" "${DEST_OPENSUSE}" 78 | 79 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](./fresh-eggs.png) 2 | # fresh-eggs 3 | 4 | # [Donate](https://paypal.me/penguinseggs) 5 | It took years of work to create the penguins-eggs, and I also incurred expenses for renting the site and subscribing to Google Gemini, for the artificial intelligence that is now indispensable. 6 | 7 | Thanks you! 8 | 9 | [![donate](https://img.shields.io/badge/Donate-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/penguinseggs) 10 | 11 | **fresh-eggs**: install penguins-eggs and configure it on your AlmaLinux, AlpineLinux, Arch, Debian, Devuan, Fedora, Manjaro, Openmamba, openSuSE, RockyLinux, Ubuntu and most derivatives. 12 | 13 | # Notes 14 | ## Native repositories 15 | * on Debian/Devuan/Ubuntu and derivatives - after you installed penguins-eggs - it's possible to add [pengins-eggs-repo](https://github.com/pieroproietti/penguins-eggs-repo) to get updates via apt. To enable it: `sudo eggs tools ppa --add`; 16 | 17 | * on Arch - after you installed penguins-eggs - you can add [pengins-eggs-repo](https://github.com/pieroproietti/penguins-eggs-repo) to get fresh penguins-eggs packages. Just use: `sudo eggs tools ppa --add`. Penguins-eggs is on [Chaotic-AUR](https://aur.chaotic.cx/) too, this is the actual [PKGBUILD](https://aur.archlinux.org/packages/penguins-eggs). 18 | 19 | * on Manjaro penguins-eggs is already on the community repo. [pengins-eggs-repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ALPINE.md)) can be added too. 20 | 21 | * on [AlmaLinux](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ENTERPRISE-LINUX.md), [AlpineLinux](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ALPINE.md), [Fedora](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-FEDORA.md), [openSuSE](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-OPENSUSE.md), [RockyLinux](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ENTERPRISE-LINUX.md) follow the links to add native repo. 22 | 23 | ## nodejs > 18.x 24 | * on some distributions, mainly Ubuntu bionic and derivatives, where nodejs >=18 is not available, you can still install penguins-eggs installing nodejs=16 from [nodesource repo](https://github.com/nodesource/distributions?tab=readme-ov-file#debian-and-ubuntu-based-distributions) and manually installing the special package [penguins-eggs-25.x.x-1bionic.amd64.deb](https://penguins-eggs.net/basket/index.php/packages/?p=packages%2Fdebs) we continue to mantain. 25 | 26 | # USAGE 27 | 28 | * `git clone https://github.com/pieroproietti/fresh-eggs` 29 | * `cd fresh-eggs` 30 | * `sudo ./fresh-eggs` 31 | 32 | And follow instructions. 33 | 34 | # [SUPPORTED DISTROS](./SUPPORTED-DISTROS.md) 35 | 36 | # Fork it! 37 | This is a short and simple script, you are encouraged to fork it and adapt it to your needs. Of course PR will welcomed! -------------------------------------------------------------------------------- /refresh-basket.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================================================== 4 | # Script di installazione per penguins-eggs 5 | # - Rileva la distribuzione 6 | # - Definisce i pacchetti da scaricare e i comandi da eseguire 7 | # - Esegue il download e l'installazione in un unico flusso 8 | # ============================================================================== 9 | 10 | # --- Variabili Globali --- 11 | SOURCE="/var/www/html/repos" 12 | DEST="/home/artisan/basket/packages" 13 | 14 | # Alpine 15 | DEST_ALPINE="${DEST}/alpine/x86_64" 16 | DEST_AUR="${DEST}/aur" 17 | DEST_DEBS="${DEST}/debs" 18 | DEST_EL9="${DEST}/el9" 19 | DEST_FEDORA="${DEST}/fedora" 20 | DEST_MANJARO="${DEST}/manjaro" 21 | DEST_OPENSUSE="${DEST}/opensuse" 22 | 23 | # pacchetti old 24 | ALPINE_OLD="${DEST_ALPINE}/old" 25 | AUR_OLD="${DEST_AUR}/old" 26 | MANJARO_OLD="${DEST_MANJARO}/old" 27 | 28 | # Crea struttura 29 | mkdir -p ${ALPINE_OLD} 30 | mkdir -p ${AUR_OLD} 31 | mkdir -p ${DEST_DEBS} 32 | mkdir -p ${DEST_EL9} 33 | mkdir -p ${DEST_FEDORA} 34 | mkdir -p ${MANJARO_OLD} 35 | mkdir -p ${DEST_OPENSUSE} 36 | 37 | # Sposta/elimina i vecchi pacchetti 38 | mv ${DEST_ALPINE}/penguins-eggs* ${ALPINE_OLD} 39 | mv ${DEST_AUR}/penguins-eggs* ${AUR_OLD} 40 | rm ${DEST_DEBS}/penguins-eggs* 41 | rm ${DEST_EL9}/penguins-eggs* 42 | rm ${DEST_FEDORA}/penguins-eggs* 43 | mv ${DEST_MANJARO}/penguins-eggs* ${MANJARO_OLD} 44 | rm ${DEST_OPENSUSE}/penguins-eggs* 45 | 46 | 47 | # --- Alpine --- 48 | # Cerca e copia l'ultimo pacchetto base (il [0-9] esclude -doc e -bash-completion) 49 | LAST_ALPINE_BASE=$(ls ${SOURCE}/alpine/penguins-eggs-[0-9]*.apk | sort -V | tail -n 1) 50 | cp "${LAST_ALPINE_BASE}" "${DEST_ALPINE}" 51 | 52 | # Cerca e copia l'ultimo pacchetto bash-completion 53 | LAST_ALPINE_BASH=$(ls ${SOURCE}/alpine/penguins-eggs-bash-completion*.apk | sort -V | tail -n 1) 54 | cp "${LAST_ALPINE_BASH}" "${DEST_ALPINE}" 55 | 56 | # Cerca e copia l'ultimo pacchetto doc 57 | LAST_ALPINE_DOC=$(ls ${SOURCE}/alpine/penguins-eggs-doc*.apk | sort -V | tail -n 1) 58 | cp "${LAST_ALPINE_DOC}" "${DEST_ALPINE}" 59 | 60 | # --- Arch --- 61 | LAST_AUR=$(ls ${SOURCE}/arch/penguins-eggs*.pkg.tar.zst | sort -V | tail -n 1) 62 | cp "${LAST_AUR}" "${DEST_AUR}" 63 | 64 | # --- Debian --- 65 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*amd64.deb | sort -V | tail -n 1) 66 | cp "${LAST_DEB}" "${DEST_DEBS}" 67 | 68 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*arm64.deb | sort -V | tail -n 1) 69 | cp "${LAST_DEB}" "${DEST_DEBS}" 70 | 71 | LAST_DEB=$(ls ${SOURCE}/deb/pool/main/penguins-eggs*i386.deb | sort -V | tail -n 1) 72 | cp "${LAST_DEB}" "${DEST_DEBS}" 73 | 74 | # --- EL9 (RHEL/Rocky/Alma) --- 75 | LAST_EL9=$(ls ${SOURCE}/rpm/el9/penguins-eggs*.rpm | sort -V | tail -n 1) 76 | cp "${LAST_EL9}" "${DEST_EL9}" 77 | 78 | # --- Fedora --- 79 | LAST_FEDORA=$(ls ${SOURCE}/rpm/fedora/42/penguins-eggs*.rpm | sort -V | tail -n 1) 80 | cp "${LAST_FEDORA}" "${DEST_FEDORA}" 81 | 82 | # --- Manjaro --- 83 | LAST_MANJARO=$(ls ${SOURCE}/manjaro/penguins-eggs*.pkg.tar.zst | sort -V | tail -n 1) 84 | cp "${LAST_MANJARO}" "${DEST_MANJARO}" 85 | 86 | # --- openSUSE --- 87 | LAST_OPENSUSE=$(ls ${SOURCE}/rpm/opensuse/leap/penguins-eggs*.rpm | sort -V | tail -n 1) 88 | cp "${LAST_OPENSUSE}" "${DEST_OPENSUSE}" 89 | 90 | -------------------------------------------------------------------------------- /fresh-eggs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================================================== 4 | # Script di installazione per penguins-eggs 5 | # - Rileva la distribuzione 6 | # - Definisce i pacchetti da scaricare e i comandi da eseguire 7 | # - Esegue il download e l'installazione in un unico flusso 8 | # ============================================================================== 9 | 10 | # --- Variabili Globali --- 11 | LAST_VERSION="25.12.22" 12 | LAST_RELEASE="1" 13 | URL_BASE="https://penguins-eggs.net/basket/packages" 14 | 15 | source ./ensure-node22.sh 16 | source ./prepare_pkgs.sh 17 | 18 | function title { 19 | clear 20 | echo "=====================================" 21 | echo "UNIVERSAL INSTALLER FOR penguins-eggs" 22 | echo "=====================================" 23 | echo "" 24 | } 25 | 26 | function press_a_key_to_continue { 27 | echo "" 28 | echo "" 29 | read -rp ">> Press enter to continue or CTRL-C to abort." 30 | title 31 | } 32 | 33 | 34 | # --- Controllo utente Root --- 35 | title 36 | if [[ "$EUID" -ne 0 ]]; then 37 | echo ">> This script must be run as root. Please use sudo or log in as root and try again." >&2 38 | exit 1 39 | fi 40 | 41 | # --- Logica di Rilevamento Distribuzione --- 42 | if [ -f /etc/os-release ]; then 43 | source /etc/os-release 44 | else 45 | echo "Error: /etc/os-release not found. Cannot determine the distribution." >&2 46 | exit 1 47 | fi 48 | 49 | echo "Distro detected: $PRETTY_NAME" 50 | echo "" 51 | 52 | FOLDER="" 53 | PACKAGES=() # Array per i pacchetti da scaricare 54 | INSTALL_CMDS=() # Array per i comandi da eseguire in sequenza 55 | 56 | case "$ID" in 57 | # NOT SUPPORTED 58 | garuda) 59 | not_supported 60 | ;; 61 | 62 | # SUPPORTED 63 | alpine) 64 | prepare_alpine 65 | ;; 66 | 67 | arch) 68 | prepare_aur 69 | ;; 70 | 71 | debian | devuan| ubuntu) 72 | ensure_node22 73 | title 74 | echo "Distro detected: $PRETTY_NAME" 75 | echo "" 76 | prepare_debs 77 | ;; 78 | 79 | fedora) 80 | prepare_fedora_or_el9 81 | ;; 82 | 83 | manjaro | biglinux) 84 | prepare_manjaro 85 | ;; 86 | 87 | openmamba) 88 | prepare_openmamba 89 | ;; 90 | 91 | sles | opensuse-tumbleweed | opensuse-slowroll | opensuse-leap) 92 | prepare_opensuse 93 | ;; 94 | 95 | *) 96 | # Logica di fallback per i derivati basata su ID_LIKE 97 | case "$ID_LIKE" in 98 | *arch*) 99 | prepare_aur 100 | ;; 101 | 102 | *debian*) 103 | ensure_node18 104 | title 105 | echo "Distro detected: $PRETTY_NAME" 106 | echo "" 107 | prepare_debs 108 | ;; 109 | 110 | *fedora*) 111 | prepare_fedora_or_el9 112 | ;; 113 | # Aggiungere altri fallback se necessario 114 | *) 115 | echo "Your distribution ($PRETTY_NAME) is not currently supported." >&2 116 | exit 1 117 | ;; 118 | esac 119 | ;; 120 | esac 121 | 122 | # Controlla se sono stati trovati pacchetti/comandi 123 | if [ ${#PACKAGES[@]} -eq 0 ]; then 124 | echo "Configuration for your distribution ($PRETTY_NAME) could not be determined." >&2 125 | exit 1 126 | fi 127 | 128 | 129 | # ============================================================================== 130 | # --- Esecuzione --- 131 | # ============================================================================== 132 | 133 | # 1. Download dei Pacchetti 134 | echo "From ${URL_BASE}/${FOLDER}/ will download:" 135 | for pkg in "${PACKAGES[@]}"; do 136 | echo " - ${pkg}" 137 | done 138 | press_a_key_to_continue 139 | 140 | for pkg in "${PACKAGES[@]}"; do 141 | echo ">> Downloading ${pkg}..." 142 | local_file="/tmp/${pkg}" 143 | rm -f $local_file 144 | remote_url="${URL_BASE}/${FOLDER}/${pkg}" 145 | 146 | if command -v curl >/dev/null 2>&1; then 147 | curl --fail -L -o "$local_file" "$remote_url" 148 | elif command -v wget >/dev/null 2>&1; then 149 | wget -q -O "$local_file" "$remote_url" 150 | else 151 | echo "Error: Neither curl nor wget is available to download files." >&2 152 | exit 1 153 | fi 154 | 155 | if [ $? -ne 0 ]; then 156 | echo "Error: Failed to download ${pkg}." >&2 157 | exit 1 158 | fi 159 | done 160 | 161 | echo "All packages downloaded successfully." 162 | echo "" 163 | 164 | # 2. Esecuzione dei Comandi di Installazione 165 | echo "The following commands will be executed for installation:" 166 | for cmd in "${INSTALL_CMDS[@]}"; do 167 | echo " - ${cmd}" 168 | done 169 | press_a_key_to_continue 170 | 171 | for cmd in "${INSTALL_CMDS[@]}"; do 172 | echo ">> Running: $cmd" 173 | if ! eval "$cmd"; then 174 | echo "Error: Command failed to execute successfully: '$cmd'" >&2 175 | echo "Aborting installation." >&2 176 | exit 1 177 | fi 178 | done 179 | 180 | echo "Installation completed successfully!" 181 | -------------------------------------------------------------------------------- /TARBALLS/setup: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ##################################### 4 | # Install penguins-eggs-tarball 5 | function install_tarball() { 6 | EGGS_PACKAGE=$1 7 | DISTRO=$2 8 | 9 | echo "" 10 | echo "install package penguins-eggs on ${DISTRO} from ${EGGS_PACKAGE}" 11 | echo "" 12 | 13 | # Controllo se il pacchetto tarball esiste 14 | if [ ! -f "$EGGS_PACKAGE" ]; then 15 | echo "Error: file $EGGS_PACKAGE don't exists." 16 | exit 1 17 | fi 18 | 19 | EGGS_HOME="/opt/penguins-eggs/" 20 | 21 | # Rimozione di /opt/penguins-eggs se esiste 22 | if [ -d "$EGGS_HOME" ]; then 23 | $SUDO rm -rf "$EGGS_HOME" 24 | fi 25 | 26 | # Estrazione e installazione del pacchetto 27 | tar -xzf "$EGGS_PACKAGE" 28 | if [ $? -ne 0 ]; then 29 | echo "Error: not possoble extract $EGGS_PACKAGE." 30 | exit 1 31 | fi 32 | 33 | mv eggs penguins-eggs 34 | $SUDO mv penguins-eggs /opt/ 35 | 36 | # Ricreazione dei link per i temi grub/isolinux 37 | $SUDO ln -sf "${EGGS_HOME}addons/eggs/theme/livecd/isolinux.main.full.cfg" "${EGGS_HOME}addons/eggs/theme/livecd/isolinux.main.cfg" 38 | $SUDO ln -sf "${EGGS_HOME}addons/eggs/theme/livecd/grub.main.full.cfg" "${EGGS_HOME}addons/eggs/theme/livecd/grub.main.cfg" 39 | 40 | # Bash completions 41 | if [ -d "/usr/share/bash-completion/completions/" ]; then 42 | $SUDO rm -f /usr/share/bash-completion/completions/eggs.bash 43 | $SUDO ln -sf "${EGGS_HOME}scripts/eggs.bash" /usr/share/bash-completion/completions/eggs.bash 44 | fi 45 | 46 | # Zsh completions 47 | if [ -d "/usr/share/zsh/functions/Completion/Zsh/" ]; then 48 | $SUDO rm -f /usr/share/zsh/functions/Completion/Zsh/_eggs 49 | $SUDO ln -sf "${EGGS_HOME}scripts/_eggs" /usr/share/zsh/functions/Completion/Zsh/ 50 | fi 51 | 52 | # Icone 53 | if [ -d "/usr/share/icons/" ]; then 54 | $SUDO rm -f /usr/share/icons/eggs.png 55 | $SUDO ln -sf "${EGGS_HOME}assets/eggs.png" /usr/share/icons/eggs.png 56 | fi 57 | 58 | # Manuali 59 | if [ -d "/usr/share/man/man1" ]; then 60 | $SUDO rm -f /usr/share/man/man1/eggs.1.gz 61 | $SUDO ln -sf "${EGGS_HOME}manpages/doc/man/eggs.1.gz" /usr/share/man/man1/eggs.1.gz 62 | fi 63 | 64 | # Link binario 65 | $SUDO rm -f /usr/bin/eggs 66 | $SUDO ln -sf "${EGGS_HOME}bin/eggs" /usr/bin/eggs 67 | 68 | # Collegamenti desktop 69 | xdg-user-dirs-update --force 70 | DESKTOP_DIR=$(xdg-user-dir DESKTOP) 71 | cp "${EGGS_HOME}addons/eggs/adapt/applications/eggs-adapt.desktop" "${DESKTOP_DIR}" 72 | cp "${EGGS_HOME}assets/penguins-eggs.desktop" "${DESKTOP_DIR}" 73 | for f in "$DESKTOP_DIR"/*.desktop; do 74 | chmod +x "$f" 75 | gio set -t string "$f" metadata::xfce-exe-checksum "$(sha256sum "$f" | awk '{print $1}')" 2>&1 > /dev/null 76 | done 77 | 78 | # Configurazione di base 79 | $SUDO eggs config -n 80 | 81 | echo "" 82 | echo "$EGGS_PACKAGE was installed." 83 | exit 0 84 | } 85 | 86 | ##################################### 87 | # Install Requirements of the distro 88 | function install_requirements() { 89 | 90 | echo "Requirements installations for distro: ${DISTRO}" 91 | echo "" 92 | 93 | case $DISTRO in 94 | aldos) 95 | $SUDO ./requirements/aldos/install.sh 96 | ;; 97 | 98 | almalinux|rocky) 99 | $SUDO ./requirements/rocky/install.sh 100 | ;; 101 | 102 | arch) 103 | $SUDO ./requirements/arch/install.sh 104 | ;; 105 | debian) 106 | $SUDO ./requirements/debian/install.sh 107 | ;; 108 | devuan) 109 | $SUDO ./requirements/devuan/install.sh 110 | ;; 111 | fedora) 112 | $SUDO ./requirements/fedora/install.sh 113 | ;; 114 | 115 | manjaro|biglinux) 116 | $SUDO ./requirements/manjarolinux/install.sh 117 | ;; 118 | 119 | nobara) 120 | $SUDO ./requirements/nobara/install.sh 121 | ;; 122 | 123 | openmamba) 124 | $SUDO ./requirements/openmamba/install.sh 125 | ;; 126 | 127 | opensuse-slowroll ) 128 | $SUDO ./requirements/opensuse/install.sh 129 | ;; 130 | opensuse-tumbleweed) 131 | $SUDO ./requirements/opensuse/install.sh 132 | ;; 133 | 134 | ubuntu|linuxmint) 135 | $SUDO ./requirements/ubuntu/install.sh 136 | ;; 137 | 138 | *) 139 | echo "This distro: $DISTRO is not supported!" 140 | exit 1 141 | ;; 142 | esac 143 | 144 | echo "" 145 | echo "Requirements of $EGGS_PACKAGE was installed." 146 | } 147 | 148 | # 149 | # main 150 | # 151 | 152 | clear 153 | echo "installing penguins-eggs-tarball..." 154 | echo "" 155 | 156 | # Se l'utente è root, abortisci 157 | if [ "$(id -u)" -eq 0 ]; then 158 | echo "dont'use root!" 159 | echo "usage: setup /path/to/tarball [requirements]" 160 | exit 1 161 | fi 162 | 163 | # Controllo dei parametri 164 | if [ -z "$1" ]; then 165 | echo "Uso: setup /path/to/penguins-eggs-tarball [requisites]" 166 | exit 1 167 | fi 168 | 169 | # Rilevamento della distribuzione Linux 170 | if [ -f /etc/os-release ]; then 171 | . /etc/os-release 172 | DISTRO=$ID 173 | #elif [ -f /etc/redhat-release ]; then 174 | # DISTRO=$(awk '{print $1}' /etc/redhat-release) 175 | else 176 | echo "Distro not recognized." 177 | exit 1 178 | fi 179 | echo "Distro recognized: ${DISTRO}" 180 | 181 | # Determinazione di SUDO 182 | if command -v sudo >/dev/null 2>&1; then 183 | SUDO='sudo' 184 | elif command -v doas >/dev/null 2>&1; then 185 | SUDO='doas' 186 | else 187 | echo "Errore: né sudo né doas sono disponibili." 188 | exit 1 189 | fi 190 | 191 | # Installazione dei requisiti se il secondo parametro è specificato 192 | if [ -n "$2" ]; then 193 | install_requirements $DISTRO 194 | fi 195 | 196 | # Installazione del pacchetto tarball 197 | install_tarball $1 $DISTRO -------------------------------------------------------------------------------- /TARBALLS/tarballs-renew: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ##################################### 4 | # Install penguins-eggs-tarball 5 | function install_tarball() { 6 | EGGS_PACKAGE=$1 7 | DISTRO=$2 8 | 9 | echo "" 10 | echo "install package penguins-eggs on ${DISTRO} from ${EGGS_PACKAGE}" 11 | echo "" 12 | 13 | # Controllo se il pacchetto tarball esiste 14 | if [ ! -f "$EGGS_PACKAGE" ]; then 15 | echo "Error: file $EGGS_PACKAGE don't exists." 16 | exit 1 17 | fi 18 | 19 | EGGS_HOME="/opt/penguins-eggs/" 20 | 21 | # Rimozione di /opt/penguins-eggs se esiste 22 | if [ -d "$EGGS_HOME" ]; then 23 | $SUDO rm -rf "$EGGS_HOME" 24 | fi 25 | 26 | # Estrazione e installazione del pacchetto 27 | TEMP_DIR=$(mktemp -d -p "/tmp" "eggs-unpacked-XXXXXX") 28 | tar -xzf "$EGGS_PACKAGE" -C "$TEMP_DIR" 29 | # tar -xzf "$EGGS_PACKAGE" 30 | if [ $? -ne 0 ]; then 31 | echo "Error: not possoble extract $EGGS_PACKAGE." 32 | exit 1 33 | fi 34 | 35 | mv $TEMP_DIR/eggs $TEMP_DIR/penguins-eggs 36 | $SUDO mv $TEMP_DIR/penguins-eggs /opt/ 37 | 38 | # Ricreazione dei link per i temi grub/isolinux 39 | $SUDO ln -sf "${EGGS_HOME}addons/eggs/theme/livecd/isolinux.main.full.cfg" "${EGGS_HOME}addons/eggs/theme/livecd/isolinux.main.cfg" 40 | $SUDO ln -sf "${EGGS_HOME}addons/eggs/theme/livecd/grub.main.full.cfg" "${EGGS_HOME}addons/eggs/theme/livecd/grub.main.cfg" 41 | 42 | # Bash completions 43 | if [ -d "/usr/share/bash-completion/completions/" ]; then 44 | $SUDO rm -f /usr/share/bash-completion/completions/eggs.bash 45 | $SUDO ln -sf "${EGGS_HOME}scripts/eggs.bash" /usr/share/bash-completion/completions/eggs.bash 46 | fi 47 | 48 | # Zsh completions 49 | if [ -d "/usr/share/zsh/functions/Completion/Zsh/" ]; then 50 | $SUDO rm -f /usr/share/zsh/functions/Completion/Zsh/_eggs 51 | $SUDO ln -sf "${EGGS_HOME}scripts/_eggs" /usr/share/zsh/functions/Completion/Zsh/ 52 | fi 53 | 54 | # Icone 55 | if [ -d "/usr/share/icons/" ]; then 56 | $SUDO rm -f /usr/share/icons/eggs.png 57 | $SUDO ln -sf "${EGGS_HOME}assets/eggs.png" /usr/share/icons/eggs.png 58 | fi 59 | 60 | # Manuali 61 | if [ -d "/usr/share/man/man1" ]; then 62 | $SUDO rm -f /usr/share/man/man1/eggs.1.gz 63 | $SUDO ln -sf "${EGGS_HOME}manpages/doc/man/eggs.1.gz" /usr/share/man/man1/eggs.1.gz 64 | fi 65 | 66 | # Link binario 67 | $SUDO rm -f /usr/bin/eggs 68 | $SUDO ln -sf "${EGGS_HOME}bin/eggs" /usr/bin/eggs 69 | 70 | # Collegamenti desktop 71 | xdg-user-dirs-update --force 72 | DESKTOP_DIR=$(xdg-user-dir DESKTOP) 73 | cp "${EGGS_HOME}addons/eggs/adapt/applications/eggs-adapt.desktop" "${DESKTOP_DIR}" 74 | cp "${EGGS_HOME}assets/penguins-eggs.desktop" "${DESKTOP_DIR}" 75 | for f in "$DESKTOP_DIR"/*.desktop; do 76 | chmod +x "$f" 77 | gio set -t string "$f" metadata::xfce-exe-checksum "$(sha256sum "$f" | awk '{print $1}')" 2>&1 > /dev/null 78 | done 79 | 80 | # Configurazione di base 81 | $SUDO eggs config -n 82 | 83 | echo "" 84 | echo "tarballs $EGGS_PACKAGE was installed on $EGGS_HOME." 85 | exit 0 86 | } 87 | 88 | ##################################### 89 | # Install Requirements of the distro 90 | function install_requirements() { 91 | 92 | echo "Requirements installations for distro: ${DISTRO}" 93 | echo "" 94 | 95 | case $DISTRO in 96 | aldos) 97 | $SUDO ./requirements/aldos/install.sh 98 | ;; 99 | 100 | almalinux|rocky) 101 | $SUDO ./requirements/rocky/install.sh 102 | ;; 103 | 104 | arch) 105 | $SUDO ./requirements/arch/install.sh 106 | ;; 107 | debian) 108 | $SUDO ./requirements/debian/install.sh 109 | ;; 110 | devuan) 111 | $SUDO ./requirements/devuan/install.sh 112 | ;; 113 | fedora) 114 | $SUDO ./requirements/fedora/install.sh 115 | ;; 116 | 117 | manjaro|biglinux) 118 | $SUDO ./requirements/manjarolinux/install.sh 119 | ;; 120 | 121 | nobara) 122 | $SUDO ./requirements/nobara/install.sh 123 | ;; 124 | 125 | openmamba) 126 | $SUDO ./requirements/openmamba/install.sh 127 | ;; 128 | 129 | opensuse-tumbleweed) 130 | $SUDO ./requirements/opensuse/install.sh 131 | ;; 132 | 133 | ubuntu|linuxmint) 134 | $SUDO ./requirements/ubuntu/install.sh 135 | ;; 136 | 137 | *) 138 | echo "This distro: $DISTRO is not supported!" 139 | exit 1 140 | ;; 141 | esac 142 | 143 | echo "" 144 | echo "Requirements of $EGGS_PACKAGE was installed." 145 | } 146 | 147 | # 148 | # main 149 | # 150 | 151 | clear 152 | echo "installing penguins-eggs-tarball..." 153 | echo "" 154 | 155 | # Se l'utente è root, abortisci 156 | if [ "$(id -u)" -eq 0 ]; then 157 | echo "dont'use root!" 158 | echo "usage: setup /path/to/tarball [requirements]" 159 | exit 1 160 | fi 161 | 162 | # Controllo dei parametri 163 | if [ -z "$1" ]; then 164 | echo "Uso: setup /path/to/penguins-eggs-tarball [requisites]" 165 | exit 1 166 | fi 167 | 168 | # Rilevamento della distribuzione Linux 169 | if [ -f /etc/os-release ]; then 170 | . /etc/os-release 171 | DISTRO=$ID 172 | #elif [ -f /etc/redhat-release ]; then 173 | # DISTRO=$(awk '{print $1}' /etc/redhat-release) 174 | else 175 | echo "Distro not recognized." 176 | exit 1 177 | fi 178 | echo "Distro recognized: ${DISTRO}" 179 | 180 | # Determinazione di SUDO 181 | if command -v sudo >/dev/null 2>&1; then 182 | SUDO='sudo' 183 | elif command -v doas >/dev/null 2>&1; then 184 | SUDO='doas' 185 | else 186 | echo "Errore: né sudo né doas sono disponibili." 187 | exit 1 188 | fi 189 | 190 | # Installazione dei requisiti se il secondo parametro è specificato 191 | if [ -n "$2" ]; then 192 | install_requirements $DISTRO 193 | fi 194 | 195 | # Installazione del pacchetto tarball 196 | install_tarball $1 $DISTRO 197 | -------------------------------------------------------------------------------- /SUPPORTED-DISTROS.md: -------------------------------------------------------------------------------- 1 | * [SUPPORTED_DISTROS](#supported-distros) 2 | * [REPOSITORIES](#repositories) 3 | * [DOWNLOADS](#downloads) 4 | 5 | # SUPPORTED DISTROS 6 | 7 | I just take the list from [distrowatch](https://distrowatch.com/), to get an idea where we are. 8 | 9 | Most of the information comes from direct experience, even from some time ago, and there may be errors. For example, some time ago Garuda could be remastered by removing the garuda-dracut package, but now it cannot. 10 | 11 | If you have different results, or know more, you can report it in the [issues](https://github.com/pieroproietti/fresh-eggs/issues). 12 | 13 | The order reflect Page Hit Ranking at 2025 luly, 28: 14 | 15 | | Rank | Name | Status | Note | Remastered | 16 | |------|--------|--------|------|------------| 17 | | 1|[CachyOS](https://cachyos.org/) | OK|v25.10.6 |[SUPPORTED_ISOS](#supported-isos) 18 | | 2|[Mint](https://linuxmint.com/) | OK||[SUPPORTED_ISOS](#supported-isos) 19 | | 3|[MX Linux](https://mxlinux.org/) |OK| I suggest to remove mx-installer and mx-snapshot| 20 | | 4|[EndeavourOS](https://endeavouros.com/)|OK||[SUPPORTED_ISOS](#supported-isos) 21 | | 5|[Debian](https://www.debian.org/) |OK||[ISOS](#isos) 22 | | 6|[Pop!_OS](https://system76.com/pop/) |OK|| 23 | | 7|[Manjaro](https://manjaro.org/) |OK||[ISOS](#isos) 24 | | 8|[Ubuntu](https://manjaro.org/) |OK||[ISOS](#isos) 25 | | 9|[Fedora](https://fedoraproject.org/) |OK||[ISOS](#isos) 26 | | 10|[Zorin](https://zorin.com/os/) |OK|| 27 | | 11|[openSUSE](https://www.opensuse.org/) |OK| calamares on the repos is not complete, use krill to install|[ISOS](#isos) 28 | | 10|[Zorin](https://zorin.com/os/) |OK|| 29 | | 12|[Nobara](https://nobaraproject.org/) |No| calamares on the repos is not complete, and installation with krill don't boot too| 30 | | 13|[elementary](https://elementary.io) |OK|| 31 | | 14|[NixOS](https://nixos.org/) |No|Distro not supported| 32 | | 15|[KDE neon](https://neon.kde.org/) |OK|| 33 | | 16|[AnduinOS](https://www.anduinos.com/) |OK|| 34 | | 17|[TUXEDO](https://www.tuxedocomputers.com/en/TUXEDO-OS_1.tuxedo)|OK|| 35 | | 18|[antiX](https://antixlinux.com/) |OK|| 36 | | 19|[Bluestar](https://distrowatch.com/table.php?distribution=bluestar)|OK|Need to clean eggs.yaml| 37 | | 20|[Garuda](https://garudalinux.org/) |No|It use dracut to build initramfs and its package `garuda-dracut` conflict with `mkinitcpio`| 38 | | 21|[AlmaLinux](https://almalinux.org/) |OK|version 9.6| 39 | | 22|[Kali](https://www.kali.org/) |OK|| 40 | | 23|[FreeBSD](https://www.freebsd.org/) |No|Not Linux, different OS| 41 | | 24|[Solus](https://getsol.us/) |No|Distro not supported| 42 | | 25|[SparkyLinux](https://sparkylinux.org/)|OK|| 43 | | 26|[BigLinux](https://sparkylinux.org/) |OK| 44 | | 27|[Alpine](https://www.alpinelinux.org/)|OK||[ISOS](#isos) 45 | | 28|[CentOS](https://www.centos.org/) ||| 46 | | 29|[Q4OS](https://q4os.org/) |OK|| 47 | | 30|[Lite](https://www.linuxliteos.com/) |OK|| 48 | | 31|[Puppy](https://puppylinux-woof-ce.github.io/)|No|Distro not supported| 49 | | 32|[EasyOS](https://easyos.org/) |No|Distro not supported|| 50 | | 33|[Tails](https://tails.net/) |OK|Distro not supported. it's mostly a live|| 51 | | 34|[Kubuntu](https://kubuntu.org/) |OK|| 52 | | 35|[OpenMandriva](https://www.openmandriva.org/) |No|Distro not supported, Mandrake based| 53 | | 36|[deepin](https://www.deepin.org/index/en) |Ko|Give `sudo deepin-immutable-writable enable` and install penguins-eggs package .deb manually| 54 | | 37|[Linuxfx](https://distrowatch.com/table.php?distribution=linuxfx) |OK|| 55 | | 38|[PCLinuxOS](https://pclinuxos.com/) |No|Distro not supported! Mandrake based| 56 | | 39|[Voyager](https://voyagerlive.org/) |OK|| 57 | | 40|[Parrot](https://parrotsec.org/) |OK|get problems to reinstall, must to check| 58 | | 41|[Rocky](https://rockylinux.org/) |OK|| 59 | | 42|[Lubuntu](https://lubuntu.me/) |OK|| 60 | | 43|[Slackware](http://www.slackware.com/) |No|Distro not supported, Slackware based| 61 | | 44|[PorteuX](https://www.porteus.org/) |No|Distro not supported, Slackware based| 62 | | 45|[Devuan](https://www.devuan.org/) |OK|| 63 | | 46|[ALT](https://getalt.org/) |No|Distro not supperted, Mandrake based| 64 | | 47|[DragonOS](https://sourceforge.net/projects/dragonos-focal/)|OK|| 65 | | 48|[Red Hat](https://redhat.com) |OK|To be tested| 66 | | 49|[Ultimate](https://ultimateedition.info/)|OK|To be tested| 67 | | 50|[ReactOS](https://reactos.org/) |No|Not Linux, different OS| 68 | | 51|[Xubuntu](https://xubuntu.org/) |OK|| 69 | | 52|[KaOS](https://kaosx.us/) |No|Distro not supported| 70 | | 53|[Chimera](https://chimera-linux.org/) |No|Distro not supported| 71 | | 54|[Archcraft](https://archcraft.io/) |OK|To be tested| 72 | | 55|[Vanilla](https://vanillaos.org/) |OK|To be tested| 73 | | 56|[Gentoo](https://www.gentoo.org/) |No|Distro not supported| 74 | | 57|[Calculate](https://www.calculate-linux.org/) |No|Distro not supported| 75 | | 58|[Commodore](https://www.commodore.net/)|OK|To be tested| 76 | | 59|[Arch](https://archlinux.org/) |OK||[ISOS](#isos) 77 | | 60|[Feren](https://ferenos.weebly.com/) |OK|| 78 | | 61|[Peppermint](https://peppermintos.com/)|OK|| 79 | | 62|[RebornOS](https://rebornos.org/) |OK|Tested from Ian Briggs| 80 | | 63|[blendOS](https://blendos.co/) |OK|To be tested| 81 | | 64|[Mageia](https://www.mageia.org) |No|Distro not supported| 82 | | 65|[Rhino](https://rhinolinux.org/) |OK|To be tested| 83 | | 66|[Bodhi](https://www.bodhilinux.com/) |OK|| 84 | | 67|[FunOS](https://funos.org/) |OK|| 85 | | 68|[GhostBSD](https://www.ghostbsd.org/) |No|Not Linux, different OS| 86 | | 69|[Nitrux](https://nxos.org/) |No|Distro not supported| 87 | | 70|[wattOS](https://www.planetwatt.com/) |OK|| 88 | | 71|[AV Linux](https://cinelerra-gg.org/it/avlinux/) |OK|| 89 | | 72|[Kodachi](https://www.digi77.com/linux-kodachi/) |OK|| 90 | | 73|[Mabox](https://maboxlinux.org/) |OK|To be tested| 91 | | 74|[SDesk](https://stevestudios.net/sdesk/) |OK|To be tested| 92 | | 75|[Artix](https://distrowatch.com/table.php?distribution=artix)|OK|To be tested| 93 | | 76|[Qubes](https://www.qubes-os.org/) |OK|To be tested| 94 | | 77|[Regata](https://get.regataos.com.br/) |OK|OpenSuSE based, to be tested| 95 | | 78|[ArchBang](https://archbang.org/) |OK|Arch based. to be tested| 96 | | 79|[Emmabuntüs](https://emmabuntus.org/) |OK|| 97 | | 80|[Tiny Core](http://www.tinycorelinux.net/) |No|Indipendent, not supported| 98 | | 81|[Oracle](https://www.oracle.com/it/linux/) |OK|To be tested| 99 | | 82|[Murena](https://murena.com/) |No|Distro not supported| 100 | | 83|[4MLinux](https://4mlinux.com/index.php) |No|Distro not supported| 101 | | 84|[Bazzite](Bazzite) |OK|Fedora based To be tested| 102 | | 85|[AUSTRUMI](http://cyti.latgola.lv/ruuni/)|No|Slackware based, not supported| 103 | | 86|[Ultramarine](https://ultramarine-linux.org/)|Fedora based To be tested| 104 | | 87|[TrueNAS](https://www.truenas.com/blog/first-release-of-truenas-on-linux/)|No|Distro not supported| 105 | | 88|[Ubuntu MATE](https://ubuntu-mate.org/) |OK|| 106 | | 89|[MakuluLinux](https://webos.makululinux.com/)|OK|| 107 | | 90|[Ubuntu Studio](https://ubuntustudio.org/) |OK|| 108 | | 91|[Proxmox](https://www.proxmox.com/en/products/proxmox-virtual-environment/overview)|OK|All you see born here!| 109 | | 92|[Void](https://voidlinux.org/) |No|Distro not supported| 110 | | 93|[OpenBSD](https://www.openbsd.org/) |No|Not Linux, different OS| 111 | | 94|[PikaOS](https://wiki.pika-os.com/en/home) |OK|| 112 | | 95|[Dr.Parted](https://dr-parted-live.sourceforge.io/) |OK|Debian based To be tested| 113 | | 96|[Damn Small](https://www.damnsmalllinux.org/) |OK|Debian based, to be tested| 114 | | 97|[Haiku](https://www.haiku-os.org/) |No|Distro not supported| 115 | | 98|[BunsenLabs](https://www.bunsenlabs.org/) |OK|| 116 | | 99|[Endless](https://www.endlessos.org/) |OK|Debian based, to be tested| 117 | |100|[Porteus](https://www.porteus.org/) |OK|Slackware based, not supported| 118 | 119 | 120 | 121 | # REPOSITORIES 122 | There are several native repositories for penguins eggs depending on your distribution. 123 | 124 | * [penguins-eggs Alpine Linux repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ALPINE.md) 125 | * [penguins-eggs Arch Linux repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ARCHLINUX.md) 126 | * [penguins-eggs Debian, Ubuntu repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-DEBIAN-DEVUAN-UBUNTU.md) 127 | * [penguins-eggs Enterprise Linux repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-ENTERPRISE-LINUX.md) 128 | * [penguins-eggs Fedora repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-FEDORA.md) 129 | * [penguins-eggs OpenSUSE repo](https://github.com/pieroproietti/penguins-eggs/blob/master/DOCS/INSTALL-OPENSUSE.md) 130 | 131 | # DOWNLOADS 132 | All materials is under my googledrive [penguins-eggs](https://drive.google.com/drive/folders/19fwjvsZiW0Dspu2Iq-fQN0J-PDbKBlYY), You can visit and browse. 133 | 134 | ### [ISOS](https://drive.google.com/drive/folders/1Wc07Csh8kJvqENj3oL-VDBU3E6eA9CLU) 135 | ### [SUPPORTED-ISOS](https://drive.google.com/drive/folders/1E6MtIt6-GfgoMyqFoDNsg2j64liVi2JZ) 136 | ### [PACKAGES](https://drive.google.com/drive/folders/1ojkzoWIFKDxtcor9z5NaqZlrVOYwFoVu) 137 | 138 | ![](./fresh-eggs.png) 139 | # DONATE 140 | It took years of work to create the penguins-eggs, and I also incurred expenses for renting the site and subscribing to Google Gemini, for the artificial intelligence that is now indispensable. 141 | 142 | Thanks you! 143 | 144 | [![donate](https://img.shields.io/badge/Donate-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/penguinseggs) 145 | --------------------------------------------------------------------------------