Gerando os Stages do 1 ao 4

De Wiki Hackstore

Exemplo do arquivo /home/yaxkin/spec/Para gerar o estágio final para realizar a instalação (Stage4) será utilizado o Catalyst, que é uma ferramenta que automatiza o processo de geração dos Stages, e é usada pela equipe de engenharia do Gentoo.

Requisitos para a geração dos Stages

  • Catalyst
  • Snapshot e Stage3 oficial Gentoo

Configuração do Catalyst

Compilando o catalyst

emerge dev-util/catalyst

Criando a estrutura de diretórios necessária para geração dos Stages

Crie o diretório base da configuração das flags de compilação do sistema:

mkdir -p /home/yaxkin/etc/portage

Crie o diretório dos arquivos *.spec:

mkdir -p /home/yaxkin/spec

Crie o diretório dos Snapshots e dos Stage3:

mkdir -p /home/yaxkin/gentoo-files
mkdir -p /var/tmp/catalyst/snapshots && ln -s /var/tmp/catalyst/snapshots/ /home/yaxkin/gentoo-files/snapshots
mkdir -p /var/tmp/catalyst/builds/default && ln -s /var/tmp/catalyst/builds/default/ /home/yaxkin/gentoo-files/stage3

Obtenha o Snapshot e o Stage3

É necessário o download do Snapshot da árvore do Portage e do Stage3 para a plataforma amd64 em um dos mirrors oficiais do Gentoo. Por padrão o Yaxkin Linux usa o mirror do Laboratório de Administração e Segurança de Sistemas da Unicamp (http://www.las.ic.unicamp.br/pub/gentoo/).

Obtenha o Snapshot da árvore do Portage mais atual:

rm -rf /home/yaxkin/gentoo-files/snapshots/portage-latest.tar.bz2
wget http://www.las.ic.unicamp.br/pub/gentoo/snapshots/portage-latest.tar.bz2 -P /home/yaxkin/gentoo-files/snapshots/

Obtenha o Stage3 mais atual:

rm -rf /home/yaxkin/gentoo-files/stage3/stage3-amd64-latest.tar.bz2
curl http://www.las.ic.unicamp.br/pub/gentoo/releases/amd64/current-stage3/`curl -l http://www.las.ic.unicamp.br/pub/gentoo/releases/amd64/current-stage3/|cut -d">" -f3|cut -d "<" -f1 |grep -v TS|grep tar.bz2` > /home/yaxkin/gentoo-files/stage3/stage3-amd64-latest.tar.bz2


OBS: Tanto os Snapshots quanto os Stage3 devem ser constantemente atualizados à cada geração de Stages do Yaxkin para que se tenha uma distribuição sempre atualizada.


Configure os arquivos package.use, package.keywords e package.mask

Acesse o diretório e crie os arquivos como os exemplos a seguir:

cd /home/yaxkin/etc/portage/

package.use

app-admin/sudo ldap -skey pam
app-arch/dpkg bzip2 nls unicode zlib dselect
app-arch/rpm nls sqlite -doc perl python
app-crypt/gnupg nls bzip2
app-doc/doxygen -doc tetex qt3
app-editors/vim-core acl nls bash-completion
app-editors/vim gpm nls perl python rubyacl cscope bash-completion vim-with-x
app-emulation/virtualbox alsa additions sdk -headless
app-misc/screen pam multiuser nethack
app-portage/eix bzip2 -doc sqlite -nls -debug -hardened -optimization -strong-optimization -tools
app-shells/bash nls afs bashlogger
app-text/ghostscript-gpl -X -bindist cups -gtk jpeg2k cjk djvu -emacs
app-text/poppler-bindings -gtk -qt4 qt3
dev-db/libpq nls pam readline ssl zlib threads
dev-db/mysql big-tables latin1 perl ssl -static -berkdb -max-idx-128
dev-db/mysql-gui-tools administrator query-browser workbench
dev-db/postgresql -doc nls pam perl python readline ssl tcl zlib xml test
dev-db/sqlite:3 fts3 readline tcl threadsafe -debug -icu -secure-delete -soundex extensions -test
dev-lang/perl -berkdb  -doc gdbm
dev-lang/ruby -doc tk rubytests socks5 threads
dev-lang/tk threads
dev-libs/apr-util -berkdb gdbm -sqlite mysql postgres sqlite3
dev-libs/geoip perl-geoipupdate
dev-python/docutils glep -emacs
dev-python/lockfile -doc
dev-vcs/git bash-completion -doc perl -tk curl
media-libs/freetype -X
media-libs/gd fontconfig jpeg png truetype jpeg png truetype
net-analyzer/base mysql postgres vhosts apache2 gd signatures
net-analyzer/cacti vhosts apache2 bundled-adodb snmp
net-analyzer/nagios-core perl web apache2
net-analyzer/nagios-nrpe ssl -command-args
net-analyzer/nagios-plugins ipv6 mysql nagios-dns nagios-game nagios-ntp nagios-ping nagios-ssh samba snmp ssl suid jabber postgres mysql samba ssl snmp nagios-dns nagios-game nagios-ntp nagios-ping nagios-ssh -ups
net-analyzer/nessus-core -X tcpd prelude
net-analyzer/net-snmp perl python ssl tcpd X -diskio -doc -elf -extensible ipv6 -lm_sensors -mfd-rewrites -minimal -rpm -sendmail -smux
net-analyzer/snort dynamicplugin -flexresp2 gre inline -ipv6 linux-smp-stats perfprofiling mysql -postgres prelude react timestats aruba mpls ppm reload reload-error-restart
net-analyzer/tcpdump -samba
net-dialup/ppp -gtk pam atm activefilter dhcp eap-tls
net-dns/bind ipv6 mysql -postgres ssl xml -berkdb dlz -doc geoip gssapi idn -ldap -odbc resolvconf -sdb-ldap threads -urandom
net-dns/bind-tools idn
net-ftp/proftpd acl mysql ncurses nls pam -postgres ssl tcpd authfile clamav hardened ifsession opensslcrypt rewrite shaper sitemisc softquota vroot xinetd
net-misc/ntp caps ssl -openntpd parse-clocks
net-misc/openssh pam tcpd -X X509 hpn libedit skey
net-misc/rsync acl iconv xattr
net-print/cups -X dbus jpeg nls pam png samba slp ssl tiff php
net-proxy/squid tproxy caps epoll ipv6 logrotate mysql pam samba sqlite ssl postgres
net-wireless/iwlwifi ipw3945 -ipw4965
sys-apps/busybox pam 
sys-apps/grep nls pcre static
sys-apps/hal acpi crypt apm
sys-apps/iproute2 atm
sys-apps/lm_sensors -sensord
sys-apps/net-tools nls -static
sys-apps/pciutils -zlib
sys-apps/qtparted -kde jfs ntfs reiserfs xfs
sys-block/parted nls readline device-mapper
sys-boot/grub -ncurses
sys-devel/bc readline libedit
sys-devel/gcc fortran -gtk nls objc
sys-devel/make nls static
sys-fs/ntfs3g -hal -debug -suid -external-fuse
sys-fs/ntfsprogs crypt
sys-fs/udev devfs-compat old-hd-rules
sys-kernel/gentoo-sources symlink
sys-libs/glibc glibc-omitfp userlocales gd nls profile
sys-power/apcupsd nls usb cgi -gnome snmp
sys-process/vixie-cron pam debug
www-apps/gallery vhosts dcraw ffmpeg gd imagemagick netpbm mysql -postgres unzip zip
www-apps/mediawiki imagemagick math mysql ocamlopt -postgres -sqlite vhosts
www-client/links -X gpm jpeg png sdl ssl tiff javascript unicode
www-plugins/mplayerplug-in divx gmedia -gtk quicktime realmedia wmp
www-servers/apache ssl threads -static -doc suexec
x11-drivers/synaptics hal
x11-libs/libX11 xcb
x11-libs/cairo X svg
sys-apps/shadow cracklib nls pam
dev-lang/python gdbm ipv6 ncurses readline sqlite ssl threads wide-unicode xml
dev-libs/openssl gmp sse2 zlib
dev-libs/beecrypt python -doc -elibc_FreeBSD -java -nocxx threads
sys-apps/portage ipc python3 -build -doc -epydoc -linguas_pl -python2 -selinux
net-fs/samba acl caps client doc fam netapi pam readline server smbclient swat syslog winbind
sys-apps/man lzma nls
dev-lang/php -recode sharedext -sharedmem mysqlnd intl exif -fpm bcmath apache2 -berkdb bzip2 calendar cli crypt ctype gd gdbm iconv imap mysql ncurses nls pcre pdo -pic readline reflection session snmp soap sockets spl sqlite ssl truetype unicode xml zlib xpm threads zip mysqli doc ftp cgi -gd-external
app-admin/syslog-ng -caps ipv6 pcre ssl tcpd -hardened -selinux -spoof-source -sql -static


package.keywords

net-analyzer/nagios
net-analyzer/nagios-core
net-analyzer/nagios-nrpe
net-analyzer/nagios-plugins
net-analyzer/netdiscover
sys-apps/net-tools
sys-block/megacli
sys-kernel/gentoo-sources
sys-kernel/linux-headers
sys-libs/tdb
sys-power/apcupsd
sys-fs/udev
app-emulation/virtualbox-guest-additions


package.mask

Por questões de segurança da compilação, não utilizaremos a versão 4.5 do gcc, e sim a 4.4.5.

sys-devel/gcc:4.5


Geração dos Stages via Catalyst

É necessário gerar do Stage1 ao Stage4 pois o LiveCD ainda não encontra-se disponível para download.

Gerar Stage1

Faça o download da versão atualizada do spec do stage1:

wget http://sourceforge.net/projects/yaxkin/files/src/spec/stage1.spec


Gerando o Stage1

Ajusta valor da versão a ser gerada para a data atual no formato ano-mês-dia:

sed s/`grep version_stamp \/home\/yaxkin\/spec\/stage1.spec | cut -d: -f2`/`date +%Y%m%d`/g -i /home/yaxkin/spec/stage1.spec

Corrige o path do Stage anterior, necessário para a criação do Stage atual:

sed s/`grep source_subpath /home/yaxkin/spec/stage1.spec | cut -d"/" -f2`/stage-amd64-latest/g -i /home/yaxkin/spec/stage1.spec

Após configurar o stage1.spec basta executar o Catalyst:

catalyst -f /home/yaxkin/spec/stage1.spec


Gerar Stage2

Arquivo de exemplo do stage2

cat /home/yaxkin/spec/stage2.spec

subarch: core2

version_stamp:20110703

target: stage2

rel_type: yaxkin

profile: default/linux/amd64/10.0

snapshot: latest

source_subpath: yaxkin/stage1-core2-20110703

portage_confdir: /home/yaxkin/etc/portage

pkgcache_path: /var/tmp/catalyst/packages/yaxkin

kerncache_path: /var/tmp/catalyst/kerncache/yaxkin

chost: x86_64-pc-linux-gnu

cflags: -O2 -march=core2 -pipe

cxxflags: -O2 -march=core2 -pipe


Gerando o Stage2

Ajusta valor da versão a ser gerada para a data atual no formato ano-mês-dia:

sed s/`grep version_stamp \/home\/yaxkin\/spec\/stage2.spec | cut -d: -f2`/`date +%Y%m%d`/g -i /home/yaxkin/spec/stage2.spec

Corrige o path do stage anterior, necessário para a criação do stage atual:

sed s/`grep source_subpath /home/yaxkin/spec/stage2.spec | cut -d"/" -f2`/stage-amd64-`date +%Y%m%d`/g -i /home/yaxkin/spec/stage2.spec

Após configurar o stage2.spec basta executar o Catalyst:

catalyst -f /home/yaxkin/spec/stage2.spec


Gerar Stage3

Arquivo de exemplo do stage3

cat /home/yaxkin/spec/stage3.spec

subarch: core2

version_stamp:20110703

target: stage3

rel_type: yaxkin

profile: default/linux/amd64/10.0

snapshot: latest

source_subpath: yaxkin/stage2-core2-20110703

portage_confdir: /home/yaxkin/etc/portage

pkgcache_path: /var/tmp/catalyst/packages/yaxkin

kerncache_path: /var/tmp/catalyst/kerncache/yaxkin

cflags: -O2 -march=core2 -pipe

cxxflags: -O2 -march=core2 -pipe


Gerando o Stage3

Ajusta valor da versão a ser gerada para a data atual no formato ano-mês-dia:

sed s/`grep version_stamp \/home\/yaxkin\/spec\/stage3.spec | cut -d: -f2`/`date +%Y%m%d`/g -i /home/yaxkin/spec/stage3.spec

Corrige o path do stage anterior, necessário para a criação do stage atual:

sed s/`grep source_subpath /home/yaxkin/spec/stage3.spec | cut -d"/" -f2`/stage-amd64-`date +%Y%m%d`/g -i /home/yaxkin/spec/stage3.spec

Após configurar o stage3.spec basta executar o Catalyst:

catalyst -f /home/yaxkin/spec/stage3.spec


Gerar Stage4

Arquivo de exemplo do stage4

wget http://sourceforge.net/projects/yaxkin/files/src/spec/stage4.spec

Gerando o Stage4

Ajusta valor da versão a ser gerada para a data atual no formato ano-mês-dia:

sed s/`grep version_stamp \/home\/yaxkin\/spec\/stage4.spec | cut -d: -f2`/`date +%Y%m%d`/g -i /home/yaxkin/spec/stage4.spec

Corrige o path do stage anterior, necessário para a criação do stage atual:

sed s/`grep source_subpath /home/yaxkin/spec/stage4.spec | cut -d"/" -f2`/stage-amd64-`date +%Y%m%d`/g -i /home/yaxkin/spec/stage4.spec

Após configurar o stage3.spec basta executar o Catalyst:

catalyst -f /home/yaxkin/spec/stage4.spec


Algumas considerações sobre os arquivos *.spec

As linhas não configuradas devem ser mantidas em branco, pois caso sejam removidas ocorrerá erro na geração do Stage4 e o processo não será finalizado.

define a arquitetura do processador:

subarch: core2


define a versão, no caso eu preferi usar data:

version_stamp:latest


define qual será o stage gerado, nesse caso será o stage4:

target: stage4


identificador do Stage. Necessário para manter uma ordem ao gerar os Stages.

rel_type: yaxkin-latest


Define o profile a ser usado:

profile: default/linux/amd64/10.0


define qual será o snapshot a ser usado:

snapshot: latest


define onde será o diretório com os arquivos package.use, package.keywords e outros:

portage_confdir: /home/yaxkin/etc/portage


define quais serão as flags usadas no kernel:

boot/kernel/gentoo/use: usb -X -pcmcia

Fonte:

http://sources.gentoo.org/cgi-bin/viewvc.cgi/catalyst/trunk/examples/stage4_template.spec?revision=1314&view=markup