Documentación del sistema de generación - guadalinex-archive/guadalinex-v5 GitHub Wiki

Configuración del sistema de generación

Instalación de dependencias

En un entorno hardy:

Descargar el sistema de los siguientes repo de bazaar:

En el directorio cd-image deben de estar los otros tres.

Hay que instalar las siguientes dependencias:

rsync bc fakeroot procmail make libc6-dev devscripts build-essential libapt-pkg-dev python-apt bzr debootstrap squashfs-tools reprepro

Instalar también las dependencias de construcción de debian-installer.

Configuración del repositorio de generación

Dentro de cdimage creamos un directorio llamado ftp, en este directorio se encontrarán todos los archivos que el sistema de generación necesita para construir los distintos medios de instalación. Este repositorio es temporal y puede borrarse, aunque es conveniente dejarlo con los archivos como cache.

Dentro del directorio ftp creamos un directorio llamado conf y dentro incluimos los siguientes archivos:

Un fichero llamado distributions con el contenido:

Codename: lobo
Components: main restricted universe multiverse
UDebComponents: main restricted
Architectures: i386
Update: - ubuntu guadalinex
DebOverride: override.lobo
SignWith: XXXXXX

Un fichero llamado updates con el siguiente contenido:

Name: ubuntu
Method: http://gensys/hardy
Suite: hardy
Architectures: i386
FilterList: install paquetescorruptos

Name: guadalinex
Method: http://gensys/derivative
Suite: lobo
Architectures: i386

Y en el fichero conf/paquetescorruptos meteremos los archivo que no queramos que se actualicen o que estén corruptos en el repositorio

mobile-application-service  purge
mobile-player     purge
openclipart-svg     purge
gclcvs        purge

Para generar un live entramos en el directorio ftp y ejecutamos:

reprepro -VVV --noskipold -b . update lobo

Al ejecutar este comando usaremos reprepro para actualizar el repositorio lobo configurardo en el fichero distributions para que se actualize con los repositorios de ubuntu y guadalinex, el guión es para que los paquetes del repositorio de guadalinex prevalezcan sobre los de ubuntu.

Semillas (seeds)

Las semillas no son más que listados de paquetes que el sistema intentará incluir en un cd de instalación generando un repositorio. Se dice intentará por que al "germinar" y luego pasarle un "britney" darán como resultado el listado final de paquetes que se incluirán. El "germinate" creará una lista con las dependencias de las semillas. Y "Britney" irá añadiendo paquetes a la lista final teniendo en cuenta la capacidad del medio de instalación y la ocupación de cada paquete.

Primero debemos adaptar el sistema para usar el sistema de semillas sin control de versiones bzr, esto se especifica en una variable de bin/run-germinate

# GERMINATE_BZR=--bzr

luego indicaremos dónde se encuentran las semillas:

export LOCAL_SEEDS="file://$CDIMAGE_ROOT/seeds/"

esta variable se puede establecer en etc/config

Un CD alternate y un CD live tienen listados de semillas, aunque un CD live sólo tiene algunos drivers y poco más.

El formato de las semillas es un directorio llamado seeds/$PROJECT.$DIST donde se colocan las listas de paquetes que tiene que ir en cada distribución.

Clave privada/pública

Crearemos un directorio en cd-image llamado secret que contendrá un directorio o enlace dot-gnupg con las claves pública y privada que el equipo de desarrollo utilizará para firmar los repositorios y los paquetes.

Configuración del sistema de generación

En el directorio etc de cd-image tenemos un archivo llamado config, en este archivo tendremos que establecer la clave privada para firmar los repositorios y otras cosas:

SIGNING_KEYID=XXXXXXX

Por el momento en este archivo se definen las arquitecturas para cada 'codename' de distribución.

Modificación de cd-image para la generación personalizada.

El sistema de generación de ubuntu/debian utilizan repositorios locales que se sincronizan a través de rsync. Como en nuestro caso vamos a utilizar reprepro para esta tarea y de esta forma separar el sistema de repositorios del sistema de generación deberemos modificar el siguiente script encargado de sincronizarlos, anonftpsync:

#! /bin/sh
set -e

# This script originates from http://www.debian.org/mirror/anonftpsync

export CDIMAGE_ROOT="${CDIMAGE_ROOT:-/srv/cdimage.ubuntu.com}"
. "$CDIMAGE_ROOT/etc/config"

# TO is the destination for the base of the Debian mirror directory
# (the dir that holds dists/ and ls-lR).

TO="$CDIMAGE_ROOT/ftp"

HOSTNAME=`hostname -f`

LOCK="${TO}/Archive-Update-in-Progress-${HOSTNAME}"

# Get in the right directory
cd "$CDIMAGE_ROOT/log"

# Check to see if another sync is in progress
if lockfile -! -l 43200 -r 0 "$LOCK"; then
  echo ${HOSTNAME} is unable to start rsync, lock file exists
  exit 1
fi
# Note: on some non-Debian systems, trap doesn't accept "exit" as signal
# specification. If that's the case on your system, try using "0".
trap "rm -f $LOCK > /dev/null 2>&1" exit

set +e

# Reprepro stuff
reprepro -b $TO update lobo

# Delete dangling symlinks.
find $TO/ -type l -xtype l | xargs -r rm 

# Make sure everything is group-writable etc. (the upstream mirror may have
# too restrictive permissions, so umask doesn't help).
find "$TO" -type d -print0 | xargs -0r chmod g+s 2>/dev/null || true
chmod -R g+rwX "$TO" 2>/dev/null || true

mkdir -p "${TO}/project/trace"
date -u > "${TO}/project/trace/${HOSTNAME}"

# Note: if you don't have savelog, use any other log rotation facility, or
# comment this out, the log will simply be overwritten each time.
savelog repo-sync.log > /dev/null 2>&1

En el archivo bin/for-project debe de

guadalinex)
        export PROJECT=guadalinex
        export CAPPROJECT=Guadalinex

Modificacion de debian-cd

  • En el directorio tools debe de haber un directorio con el mismo nombre de la distribución.

  • En el directorio tools/boot debe de haber un directorio con el mismo nombre de la distribución.

  • En el directorio data debe de haber un directorio con las pantallas de gfxboot entre otras cosas.

  • En el archivo CONF.sh debe indicar el codename, la versión, y algunos datos "estéticos":

    lobo) export PREV_CODENAME=toro export CODENAME=lobo export CAPCODENAME='Lobo' export DEBVERSION=5.0 export OFFICIAL="Alpha"

Instalación y configuración del sistema de generación Live (lig)

'lig' está empaquetado, así que la instalación está clara. Una vez instalado, toda la configuración se hará en /etc/lig/conf. Adjunto un fichero de ejemplo usado en el sistema de generación para gv5.

## Define variables
# logs files
root_logs="/var/log"
log_file="${root_logs}/lig-$(date +%Y%m%d%H%M).log"
current_log_file="${root_logs}/lig.log"

## directories
# these is where the gensys is installed
CDIMAGE_ROOT=/var/opt/cdimage

# dir where squashfs file should be dropped for the gensys
live_dir=$CDIMAGE_ROOT"/ftp/"

# dir where the live system will be jailed into
sources_dir="/tmp/sources"

## generation repository vars

#mirror="file://${mirror_dir}"
mirror="ftp://repositorio/ubuntu"

# this var is used for debootstrap and for the temporal /etc/apt/sources.list
# during the generation.

#components="main,restricted"
components="main,restricted,universe,multiverse"

# arguments vars default values
debootstrap="yes"
squashfs="yes"
keep_sources="no"
verbose="no"
quiet="no"
debug="no"

# packages variables
#
# Packages are installed on 3 different stages:

# these will be the firstly installed packages
pre_base_pkgs="language-support-es"

# these will be the following (second)
base_pkgs="linux-image-generic language-pack-gnome-es meta-guadalinex-v5"

# and these the last ones
live_pkgs="casper casper-guada ubiquity-frontend-gtk ubiquity-ubuntu-artwork xfsprogs jfsutils ntfsprogs discover1 xresprobe laptop-detect  gparted"

# packages (if any) that will be installed on "lig --update"
update_pkgs=""

# these packages will be excluded from debootstrap (note that they are separated by commas)
excluded_pkgs="guadalinex-minimal-conf,ubuntu-keyring"

# final /etc/apt/sources.list for the live system

final_sources_list="# junta's repository here
deb http://archive.ubuntu.com/ubuntu hardy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse"

Todas las variables están perfectamente comentadas y no necesitan mucha más explicación.

Generación de un cd live

Lo primero que debemos generar es un squashfs con un sistema casi completo. Para ello utilizaremos la herramienta lig. La configuración de esta herramienta está en /etc/lig/conf. Una vez configurada como root ejecutaremos:

bash lig -D lobo -P guadalinex

Debootstrap debe de tener el script necesario con el nombre de la distribución.

Esto generará en $CDIMAGE_ROOT/ftp/$DIST/$PROJECT/current/ los archivos de squashfs, manifests, núcleo a arrancar e initrd.

En el directorio ftp de cd-image hay un archivo llamado ubuntu-winfoss-7.10.tar.gz que es el contenido del cd-live para windows.

Ahora debemos generar el CD, para ello ejecutaremos:

export PATH=/var/opt/cdimage/bin:/usr/sbin:/sbin:/usr/bin:/bin
export CDIMAGE_ROOT=/var/opt/cdimage
export ARCHES="i386"
export DIST=lobo 
export SKIPMIRRORCHECK="yes"
export DERIVATIVE="guada"

for-project guadalinex cron.daily-live

La imagen de cd quedará alojada en $CDIMAGE_ROOT/scratch/guadalinex/daily-live/debian-cd/i386/, con extensión .raw

Generación de un cd live con suplementos ===

Para generar un cd-live con suplementos debemos haber generado anteriormente el suplemento. Es decir, debemos tener la estructura completa del suplemento en un directorio:

\-rw-r--r-- 1 gensys gensys   38 Apr 16 13:25 README.diskdefines
drwxr-xr-x 3 gensys gensys 4096 Apr 10 11:21 dists
drwxr-xr-x 2 gensys gensys 4096 Apr 16 13:25 pool

deberemos establecer la variable SUPPLEMENT=1 y guardarlo en la ruta $CDIMAGE_ROOT/supplement/

Con la variable exportada y el directorio con todo el contenido del suplemento lanzamos

for-project guadalinex cron.daily-live

Y nos generará un dvd-live con suplementos.

El script que utilizará debian-cd para realizar esta tarea es debian-cd/tools/guadalinex_sup

Script de generación live completo

Se ha creado un script que integra todos los pasos que hasta ahora hacían falta para generar una iso de cd-live:

  • Compilar paquetes
  • Añadir al repositorio 'derivatives' paquetes.
  • Añadir al repositorio del sistema de generación los nuevos paquetes.
  • Crear imagen squashfs.
  • Crear iso del cd.

Para estas tareas este script usa los siguientes scripts respectivamente:

  • /var/opt/cdimage/repo-bin/svn-compile
  • /var/opt/cdimage/repo-bin/clean-derivative-repository
    • /var/opt/cdimage/repo-bin/update-derivative-repository
  • /var/opt/cdimage/bin/anonftpsync
  • /var/opt/cdimage/lig/lig -D distro -P project
  • /var/opt/cdimage/bin/for-project PROJECT cron.daily-live

Los directorios 'lig' y 'repo-bin' son enlaces a los directorios del svn de estas utilidades: /var/guadalinexv5/apps/lig/trunk y /var/guadalinexv5/repo/bin

El uso de este script es sencillo:

Usage:
  gensys.sh [-D | --distro DISTRONAME] [-P | --project PROJECTNAME]

Options:
  -h, --help             Show this help
  -D, --distro           Select the source Ubuntu version to build
  -P, --project          Set the project name
  -u, --update           Pass "--update" to lig

Con especificar la distro a generar y el proyecto, él llamará a los scripts con los argumentos necesarios.