criando um fedora personalizado com o pungi

surgiu uma necessidade aqui no trabalho de montar uma imagem do fedora 18 para uma instalação que deveria ter pacotes configurados automaticamente durante a instalação do sistema — e tais pacotes já deveriam constar na ISO para evitar uso de banda desnecessário [para o download dos pacotes dos repositórios].

depois de quebrar a cabeça com revisor [que foi descontinuado e salvo engano só funciona até a versão 13 do fedora] voltei-me para o pungi.

de acordo com a documentação [o manjado ‘man pungi’]:

NAME
pungi - anaconda-based installation spin tool

SYNOPSIS
pungi options

DESCRIPTION
pungi is a tool to create anaconda-based installation trees or media images given a set of RPM packages.

OPTIONS
pungi is entirely command line oriented. All input to the program is given by command line options.

de modos que para criar uma imagem customizada do fedora 18 precisaremos criar um arquivo kickstart onde serão definidos com quais pacotes iremos construir a imagem.

não sabe o que é um kickstart ? tome: Anaconda/Kickstart Fedora Project

agora que você leu e entendeu o que é um arquivo kickstart veja abaixo o arquivo que eu montei com base no que eu precisava:


repo --name=fedora --mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-18&arch=x86_64
repo --name=pgdg92 --baseurl=http://yum.postgresql.org/9.2/fedora/fedora-18-x86_64

%packages --default --nobase

# lista de EXCLUSAO [NAO QUERO ESSAS PORCARIAS NA MINHA ISO]
-libreoffice*
-kernel*debug*
-kernel-kdump*
-kernel-tools*
-syslog-ng*
-astronomy-bookmarks
-generic*
-GConf2-dbus*
-bluez-gnome
# Periods cause problems in paterns, so replace with *s
-java-1*8*0-openjdk
-community-mysql*
-jruby*

# core
kernel*
dracut-*

## common stuff
@standard
@core
@dial-up
@hardware-support
@admin-tools
@smb-server

# Workstation
@development-libs
@development-tools
@web-server
@php

# Things needed for installation
-@anaconda-tools
-anaconda*
-ql2100-firmware
-ql2200-firmware
-ql23xx-firmware
-rt61pci-firmware
-rt73usb-firmware
openssh-clients
wget
bind-utils
man
mailx
dmidecode
dos2unix
ecryptfs-utils
ethtool
freetds
glibc.i686
gsmartcontrol
httpd
javacc.noarch
libpqxx.i686
libstdc++.i686
mlocate
mod_perl
mod_ssl
mod_ssl
net-tools
ntp
openssl
perl-devel
perl-ExtUtils-Install.noarch
perl-ExtUtils-MakeMaker.noarch
perl-ExtUtils-Manifest.noarch
perl-ExtUtils-ParseXS.noarch
pgadmin3
pg_top
php
php-gd
php-interbase
php-ldap
php-mbstring
php-mssql
php-pecl-xdebug
php-pgsql
php-phpunit-PHPUnit.noarch
php-xml
postgresql92
postgresql92-contrib
postgresql92-devel
postgresql92-plperl
postgresql92-server
qca2
qca-ossl
qt
qt-mobility
qt-odbc
qt-postgresql
qt-qsa
qt-settings
qtsingleapplication
qtsinglecoreapplication
qtwebkit
qt-x11
quazip
qxmpp
svn
tar
telnet
unzip
vim-enhanced
vim-minimal
vim-filesystem
vim-common
wget
zint-qt
zip

# Langpacks [EXCLUIDOS TAMBEM]
-autocorr-*
-eclipse-nls-*
-hunspell-*
-hyphen-*
-calligra-l10n-*
-kde-l10n-*
-libreoffice-langpack-*
-man-pages-*
-mythes-*

# Removals
-PackageKit-zif
-zif

%end

após definir seu arquivo [que chamarei de spin.ks] você precisa chamar o pungi via linha de comando — exemplo abaixo:


pungi -c <caminho>/spin.ks --force --nosource --nodebuginfo --flavor=Fedora --name=Fedora --ver=18 --destdir=<caminho>/diretorio_de_destino/ -G -C -B -I

explicação dos parâmetros abaixo:


--name=string
 Set the name for your distribution (defaults to "Fedora").

--ver=string
 Set the version for your distribution (defaults to datestamp, used for $releasever in yum).

--flavor=string
 Set the flavor of your spin (optional).

--destdir=pathspec
 Path specifying the destination directory (defaults to current directory).

--nosource
 Disable gathering of source packages (optional).

--force
 Force reuse of an existing destination directory (will overwrite files).

-c ksfile, --config=ksfile
 Path to kickstart configuration file.

--all-stages
 Enable ALL stages.

-G Enable the Gather stage.

-C Enable the Createrepo stage.

-B Enable the BuildInstall stage.

-I Enable the CreateISO stage.

o resultado é sua imagem ISO pronta para ser gravada — ou testada em uma VM antes.

divirta-se.

P.S. para instalar os pacotes declarados automaticamente você tem que usar um kickstart para instalar seu Fedora customizado. Eu criei um [exemplo abaixo] e editei o arquivo isolinux/isolinux.cfg dentro da estrutura da ISO para buscar o kickstart dentro do próprio DVD de instalação.

label linux
 menu label ^Instalar Fedora 18 x86_64 Customizado
 kernel vmlinuz
 append initrd=initrd.img inst.stage2=hd:LABEL=Fedora\x2018\x20x86_64\x20Customizado ks=cdrom:/dev/sr0:/ks.cfg

lembrando: o arquivo ks.cfg deve estar na raiz da ISO.

conteúdo do meu ks.cfg


%pre
#!/bin/sh
#v_all_devices=`ls -al /dev/disk/by-id/ | awk -F '>' '{ print $2 }' | egrep "[a-z]*" --only | sort -u`
v_all_devices=`ls /sys/block/ | awk -F '>' '{ print $1 }' | sort -u`
v_usb_devices=`ls -al /dev/disk/by-id/*usb* | awk -F '>' '{ print $2 }' | egrep "[a-z]*" --only | sort -u`
v_existent_disks=`fdisk -l | egrep "^Disk \/dev" | awk -F ' ' '{ print $2 }' | sed -e 's/\/dev\///g' | egrep "[a-z]*" --only | sort -u`
if [ ! -z ${v_usb_devices} ] ; then
 v_devices_to_wipe=`echo ${v_all_devices} | sed -e "s/${v_usb_devices}//g"`
else
 v_devices_to_wipe=${v_all_devices}
fi
for v_existent_disk in `echo ${v_existent_disks}`; do
 for v_drive in `echo ${v_devices_to_wipe}`; do
 v_check=`echo "${v_drive}" | egrep "${v_existent_disk}"`
 [ $? = 0 ] && echo "clearpart --all --drives=${v_drive}" >> /tmp/part-include
 done
done
%end

# Install OS instead of upgrade
install
cdrom

# Firewall configuration
firewall --enabled --http --ssh --port=5222:tcp --port=443:tcp --port=9090:tcp --port=7777:tcp --port=5229:tcp

# Keyboard layouts
keyboard 'br-abnt2'

# Reboot after installation
reboot

# Root password
rootpw <senha_de_root> # pode ser criptografada como exemplo abaixo:
#rootpw --iscrypted $1$RdP3Nwgrt$VFPHPhuOrkxC.Rs5IlFNx/

# System timezone
timezone America/Fortaleza --isUtc

# System authorization information
auth --useshadow --passalgo=md5

# Use text mode install
text

firstboot --disable

# Network information
network --bootproto=dhcp --noipv6 --activate --hostname=xxxx

# System language
lang en_US

# SELinux configuration
selinux --enforcing

# System bootloader configuration
bootloader --location=mbr

# Partition clearing information
%include /tmp/part-include

# Disk partitioning information
part /boot --asprimary --fstype="ext4" --size=512
part swap --asprimary --fstype="swap" --size=4096
part / --asprimary --fstype="ext4" --size=16384
part /home --asprimary --fstype="ext4" --grow --size=1

%pre --interpreter=/bin/bash
echo "Ok"
%end

%post --interpreter=/bin/bash

cd /root

systemctl enable NetworkManager-wait-online.service

%end

%packages

## common stuff
@standard
@core
@dial-up
@hardware-support
@smb-server

# Workstation
@development-tools
@web-server
@php

# Things needed for installation
-ql2100-firmware
-ql2200-firmware
-ql23xx-firmware
-rt61pci-firmware
-rt73usb-firmware
-systemtap-sdt-devel
openssh-clients
wget
bind-utils
man
mailx
dmidecode
dos2unix
ecryptfs-utils
ethtool
freetds
glibc.i686
gsmartcontrol
httpd
javacc.noarch
libpqxx.i686
libstdc++.i686
mlocate
mod_perl
mod_ssl
mod_ssl
net-tools
ntp
openssl
perl-devel
perl-ExtUtils-Install.noarch
perl-ExtUtils-MakeMaker.noarch
perl-ExtUtils-Manifest.noarch
perl-ExtUtils-ParseXS.noarch
pgadmin3
pg_top
php
php-gd
php-interbase
php-ldap
php-mbstring
php-mssql
php-pecl-xdebug
php-pgsql
php-phpunit-PHPUnit.noarch
php-xml
postgresql92
postgresql92-contrib
postgresql92-devel
postgresql92-plperl
postgresql92-server
qca2
qca-ossl
qt
qt-mobility
qt-odbc
qt-postgresql
qt-qsa
qt-settings
qtsingleapplication
qtsinglecoreapplication
qtwebkit
qt-x11
quazip
qxmpp
svn
tar
telnet
unzip
vim-enhanced
vim-minimal
vim-filesystem
vim-common
wget
zint-qt
zip

# Langpacks
-autocorr-*
-eclipse-nls-*
-hunspell-*
-hyphen-*
-calligra-l10n-*
-kde-l10n-*
-libreoffice-langpack-*
-man-pages-*
-mythes-*

# Removals
-PackageKit-zif
-zif

%end

# Reboot after installation
reboot --eject

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s