Código-fonte integral de cada script do GNUcego.
Estes scripts residem em /usr/local/bin/ (persistentes) e em /media/wellton/backup/debian/ (o espelho/repo). O conteúdo abaixo reflete o estado atual do projeto.
#!/bin/bash
# Constrói uma ISO live do GNUcego a partir de um chroot.
# Uso: gnucego-build-iso.sh <CHROOT> <NOME_SAIDA> <LABEL_ISO> <SESSAO_PADRAO>
set -e
CHROOT="$1"; NAME="$2"; LABEL="$3"; SESSION="$4"
WORK=/usr/local/share/gnucego-build
BUILD=/tmp/gnucego-build
PUBLISH=/media/wellton/backup/debian/gnucego
DATE=$(date +%Y%m%d)
rm -rf "$BUILD"
mkdir -p "$BUILD/live" "$BUILD/isolinux"
KVER=$(basename "$(ls "$CHROOT"/boot/vmlinuz-* | tail -1)" | sed 's/^vmlinuz-//')
echo "kernel: $KVER"
rm -rf "$CHROOT/var/lib/apt/lists/"* "$CHROOT/var/cache/apt/"* "$CHROOT/var/log/"* \
"$CHROOT/tmp/"* "$CHROOT/run/"* "$CHROOT/etc/resolv.conf" 2>/dev/null || true
mksquashfs "$CHROOT" "$BUILD/live/filesystem.squashfs" \
-comp zstd -Xcompression-level 15 -processors 6 -noappend \
-wildcards -e "dev/*" "proc/*" "sys/*" "run/*" "tmp/*" \
"var/cache/apt/*" "var/lib/apt/lists/*" "var/log/*"
cp "$CHROOT/boot/vmlinuz-$KVER" "$BUILD/live/vmlinuz"
cp "$CHROOT/boot/initrd.img-$KVER" "$BUILD/live/initrd"
cp /usr/lib/ISOLINUX/isolinux.bin "$BUILD/isolinux/"
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 "$BUILD/isolinux/"
cp "$WORK/isolinux.cfg" "$BUILD/isolinux/isolinux.cfg"
ISO="$BUILD/$NAME-$DATE.iso"
xorriso -as mkisofs -o "$ISO" \
-V "$LABEL $DATE" \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-J -R -quiet "$BUILD"
cp "$ISO" "$PUBLISH/$NAME.iso"
cp "$ISO" "$PUBLISH/$NAME-$DATE.iso"
SHA=$(sha256sum "$ISO" | cut -d' ' -f1)
echo "CONCLUÍDO: $PUBLISH/$NAME.iso ($SHA)"
echo "$SHA" > "$PUBLISH/$NAME.sha256"
rm -rf "$BUILD"
#!/bin/bash
# Constrói UMA variante de interface (sessão default diferente).
# Uso: gnucego-build-variant.sh <CHROOT> <NOME_SAIDA> <LABEL> <SESSAO>
set -e
CHROOT="$1"; NAME="$2"; LABEL="$3"; SESSION="$4"
WORK=/usr/local/share/gnucego-build
BUILD=/tmp/gnucego-build
PUBLISH=/media/wellton/backup/debian/gnucego
DATE=$(date +%Y%m%d)
# troca a sessão default do lightdm temporariamente
lightdm="$CHROOT/etc/lightdm/lightdm.conf"
orig=$(grep -E '^user-session=' "$lightdm" || echo "")
sed -i "s/^user-session=.*/user-session=$SESSION/" "$lightdm"
cleanup() {
if [ -n "$orig" ]; then
sed -i "s/^user-session=.*/${orig//\//\\/}/" "$lightdm"
fi
}
trap cleanup EXIT
rm -rf "$BUILD"
mkdir -p "$BUILD/live" "$BUILD/isolinux"
KVER=$(basename "$(ls "$CHROOT"/boot/vmlinuz-* | tail -1)" | sed 's/^vmlinuz-//')
rm -rf "$CHROOT/var/lib/apt/lists/"* "$CHROOT/var/cache/apt/"* "$CHROOT/var/log/"* \
"$CHROOT/tmp/"* "$CHROOT/run/"* "$CHROOT/etc/resolv.conf" 2>/dev/null || true
mksquashfs "$CHROOT" "$BUILD/live/filesystem.squashfs" \
-comp zstd -Xcompression-level 15 -processors 6 -noappend \
-wildcards -e "dev/*" "proc/*" "sys/*" "run/*" "tmp/*" \
"var/cache/apt/*" "var/lib/apt/lists/*" "var/log/*"
cp "$CHROOT/boot/vmlinuz-$KVER" "$BUILD/live/vmlinuz"
cp "$CHROOT/boot/initrd.img-$KVER" "$BUILD/live/initrd"
cp /usr/lib/ISOLINUX/isolinux.bin "$BUILD/isolinux/"
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 "$BUILD/isolinux/"
cp "$WORK/isolinux.cfg" "$BUILD/isolinux/isolinux.cfg"
ISO="$BUILD/$NAME-$DATE.iso"
xorriso -as mkisofs -o "$ISO" -V "$LABEL $DATE" \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table -J -R -quiet "$BUILD"
cp "$ISO" "$PUBLISH/$NAME.iso"
cp "$ISO" "$PUBLISH/$NAME-$DATE.iso"
SHA=$(sha256sum "$ISO" | cut -d' ' -f1)
echo "$SHA" > "$PUBLISH/$NAME.sha256"
echo "CONCLUÍDO: $PUBLISH/$NAME.iso ($SHA)"
rm -rf "$BUILD"
#!/bin/bash
# Constrói a ISO netinstall do GNUcego (instalação mínima, sem Calamares).
set -e
WORK=/tmp/opencode/netinstall
BUILD=/tmp/gnucego-neti
PUBLISH=/media/wellton/backup/debian/gnucego
DATE=$(date +%Y%m%d)
rm -rf "$BUILD"
mkdir -p "$BUILD/isolinux"
cp "$WORK/linux" "$BUILD/linux"
cp "$WORK/initrd.gz" "$BUILD/initrd.gz"
cp "$WORK/preseed.cfg" "$BUILD/preseed.cfg"
cp /usr/lib/ISOLINUX/isolinux.bin "$BUILD/isolinux/"
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 "$BUILD/isolinux/"
cp "$WORK/isolinux.cfg" "$BUILD/isolinux/isolinux.cfg"
ISO="$BUILD/gnucego-install-amd64-$DATE.iso"
xorriso -as mkisofs -o "$ISO" -V "GNUcego Install $DATE" \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-c isolinux/boot.cat -b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table -J -R -quiet "$BUILD"
cp "$ISO" "$PUBLISH/gnucego-install-amd64.iso"
cp "$ISO" "$PUBLISH/gnucego-install-amd64-$DATE.iso"
SHA=$(sha256sum "$ISO" | cut -d' ' -f1)
echo "$SHA" > "$PUBLISH/gnucego-install-amd64.sha256"
echo "CONCLUÍDO: $PUBLISH/gnucego-install-amd64.iso ($SHA)"
rm -rf "$BUILD"
linux e initrd.gz (patcheado) do netinstall ficam em /tmp/opencode/netinstall/ — que é volátil e pode ser apagado após um reboot. Recomenda-se mover esse diretório para um local persistente.
Roda dentro de /target via late_command. Aplica toda a identidade GNUcego. Código integral:
#!/bin/sh
# GNUcego pós-instalação (roda dentro de /target via preseed late_command)
# Sem set -e: qualquer falha nao deve travar o "finalizando a instalacao".
BASE="http://repo.gnucego.com.br"
# 1) sources.list base (main + security + updates) - HTTP
cat > /etc/apt/sources.list <<EOF
deb $BASE exu main
deb $BASE exu-security main
deb $BASE exu-updates main
EOF
apt-get update || true
# 2) chave GNUcego + repo gnu
if [ -f /tmp/gnucego-keyring.deb ]; then
dpkg -i /tmp/gnucego-keyring.deb || true
fi
echo "deb [signed-by=/usr/share/keyrings/gnucego.gpg] $BASE gnu main" >> /etc/apt/sources.list
apt-get update || true
# 3) IDENTIDADE (rebranding: GNUcego, sem "Debian")
cat > /etc/os-release <<'EOF'
NAME="GNUcego GNU/Linux-libre"
VERSION="2026.2 LTS"
ID=gnucego
ID_LIKE=debian
PRETTY_NAME="GNUcego GNU/Linux-libre 2026.2 LTS"
ANSI_COLOR="1;31"
HOME_URL="https://gnucego.com.br"
SUPPORT_URL="https://gnucego.com.br"
BUG_REPORT_URL="https://gnucego.com.br"
EOF
cat > /etc/lsb-release <<'EOF'
DISTRIB_ID=GNUcego
DISTRIB_RELEASE=2026.2
DISTRIB_CODENAME=morcego
DISTRIB_DESCRIPTION="GNUcego GNU/Linux-libre 2026.2 LTS"
EOF
cat > /etc/issue <<'EOF'
GNUcego GNU/Linux-libre \n \l
EOF
echo "GNUcego GNU/Linux-libre 2026.2 LTS" > /etc/gnucego_version
# 4) GRUB: nome sem duplicacao + cores vermelho/preto
if [ -f /etc/default/grub ]; then
sed -i 's/^GRUB_DISTRIBUTOR=.*/GRUB_DISTRIBUTOR="GNUcego GNU\/Linux-libre"/' /etc/default/grub
grep -q '^GRUB_COLOR_NORMAL=' /etc/default/grub || echo 'GRUB_COLOR_NORMAL="white/black"' >> /etc/default/grub
sed -i 's/^GRUB_COLOR_NORMAL=.*/GRUB_COLOR_NORMAL="white\/black"/' /etc/default/grub
grep -q '^GRUB_COLOR_HIGHLIGHT=' /etc/default/grub || echo 'GRUB_COLOR_HIGHLIGHT="red/black"' >> /etc/default/grub
sed -i 's/^GRUB_COLOR_HIGHLIGHT=.*/GRUB_COLOR_HIGHLIGHT="red\/black"/' /etc/default/grub
fi
if [ -f /etc/grub.d/10_linux ]; then
sed -i 's/Ubuntu|Kubuntu|\*GNU\/Linux)/Ubuntu|Kubuntu|*GNU\/Linux|*GNU\/Linux-libre)/' /etc/grub.d/10_linux
fi
if [ -f /etc/grub.d/05_debian_theme ]; then
perl -i -pe 's/menu_color_normal=cyan\/blue/menu_color_normal=white\/black/' /etc/grub.d/05_debian_theme
perl -i -pe 's/menu_color_highlight=white\/blue/menu_color_highlight=red\/black/' /etc/grub.d/05_debian_theme
fi
cat > /etc/grub.d/09_gnucego_colors <<'EOF'
#!/bin/sh
# GNUcego: cores vermelhas (rodam por ultimo).
cat <<GRUBEOF
set color_normal=white/black
set color_highlight=red/black
menu_color_normal=white/black
menu_color_highlight=red/black
GRUBEOF
EOF
chmod 755 /etc/grub.d/09_gnucego_colors
if grep -q '^GRUB_THEME' /etc/default/grub 2>/dev/null; then
sed -i 's/^GRUB_THEME=.*/GRUB_THEME=""/' /etc/default/grub
fi
# 5) LOCALE pt_BR.UTF-8
if [ -x /usr/sbin/locale-gen ]; then
sed -i 's/^# *pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen
locale-gen pt_BR.UTF-8 || true
update-locale LANG=pt_BR.UTF-8 LC_ALL=pt_BR.UTF-8 || true
fi
# 6) FASTFETCH (logo + config)
if command -v fastfetch >/dev/null 2>&1; then
mkdir -p /etc/fastfetch
wget -q -O /etc/fastfetch/gnucego-logo.txt "$BASE/gnucego/gnucego-logo-fastfetch.txt" || true
# config.jsonc com "color": {"1": "red"}
fi
# 7) WALLPAPER (GRUB/GDM/LightDM/SDDM + desktop)
WALL_TARGET=/usr/share/backgrounds/gnucego
mkdir -p "$WALL_TARGET"
wget -q -O "$WALL_TARGET/wallpaper.jpg" "$BASE/gnucego/wallpaper.jpg" || true
# ... aplica dconf/gsettings para GNOME/Cinnamon/MATE/Xfce ...
# 8) i3wm (config + terminator + wallpaper feh)
# ...
# 9) final
update-initramfs -u -k 7.3.1-gnu || update-initramfs -u || true
update-grub || true
apt-get clean || true
echo "=== GNUcego pós-instalação concluída ==="
postinstall.sh completo (391 linhas) está publicado em repo.gnucego.com.br/gnucego/gnucego-postinstall.sh — você pode baixá-lo para ver cada seção em detalhe (i3wm, dconf, wallpaper para cada DE, etc.).
Rebuild do Testing com pacotes mais novos do espelho, atualizando a página automaticamente. Código integral:
#!/bin/bash
# Rebuilds GNUcego Testing ISO com pacotes mais novos do espelho.
set -u
CHROOT=/home/wellton/debian/gnucego-testing-chroot
BUILD=/tmp/gnucego-build
PUBLISH=/media/wellton/backup/debian/gnucego
DATE=$(date +%Y%m%d)
# 1. apt update/upgrade no chroot (monta dev/proc/sys)
mount --bind /dev "$CHROOT/dev"; mount --bind /dev/pts "$CHROOT/dev/pts"
mount -t proc proc "$CHROOT/proc"; mount -t sysfs sysfs "$CHROOT/sys"
cp /etc/resolv.conf "$CHROOT/etc/resolv.conf"
chroot "$CHROOT" apt-get update && chroot "$CHROOT" apt-get upgrade -y
KVER=$(basename "$(ls "$CHROOT"/boot/vmlinuz-* | tail -1)" | sed "s/^vmlinuz-//")
umount "$CHROOT/proc"; umount "$CHROOT/sys"; umount "$CHROOT/dev/pts"; umount "$CHROOT/dev"
# 2. squashfs + 3. ISO + 4. publicar (mesma lógica do build-iso)
mksquashfs "$CHROOT" "$BUILD/live/filesystem.squashfs" \
-comp zstd -Xcompression-level 15 -processors 6 -noappend \
-wildcards -e "dev/*" "proc/*" "sys/*" "run/*" "tmp/*" \
"var/cache/apt/*" "var/lib/apt/lists/*" "var/log/*"
# xorriso + cp + sha256 ...
# (atualiza a página com o novo SHA e tamanho via python)
Os quatro scripts do espelho (sync-debian-mirror.sh, fix-releases.py, regen-installer-index.py, update-gnu-repo.py) estão documentados na página Espelho.