View previous topic :: View next topic |
Author |
Message |
El_Goretto Moderator
Joined: 29 May 2004 Posts: 3166 Location: Paris
|
Posted: Tue Aug 19, 2008 1:25 pm Post subject: [Howto] Server Yum pour RedHat, CentOS, SuSE... |
|
|
Le but du jeu: faire héberger par une belle Gentoo svelte, propre sur elle, bien dans son corps et bien dans sa tête, toute l'infra pour que les OS à base de RPMs puissent installer leurs packages à distance (avec yum, zypper, yast, etc). Traduction: avoir un repository RPM sur son LAN.
Attention, c'est un peu brut de fonderie, mais ça a marché, et je viens de refaire une install pour vérifier que cela fonctionne:
- emerge apache (vhost config file sample: http://sial.org/howto/yum/)
- emerge rpm pysqlite [dépendances pour createrepo]
- créer un lien: ln -s /usr/lib/python2.4/site-packages/pysqlite2/dbapi2.py /usr/lib/python2.4/site-packages/sqlite.py [ya peut être moins crado, mais "ça marche" (tm)]
- installer yum-metadata-parser (from sources: http://linux.duke.edu/projects/yum/download.ptml)
- installer createrepo (from sources: http://linux.duke.edu/projects/metadata/)
- optionnel: écrire un script pour cron, afin de remettre à jour les metadata du repository si vous faites des modifs sur la liste de packages. Comme c'est très/trop dépendant de votre structures de fichiers où sont stockés les RPMs, je vous laisse l'écrire vous même, le mien n'est qu'un exemple.
Code: |
#!/bin/bash
# auteur: Elgo
# version: 1.0 <11/09/07>
# version: 1.1 <??/06/08> (prise en compte du fichier comps.xml pour supporter la selection de groupes de paquets)
# version: 2.0 <24/06/08> (reecriture au propre avec la fonction update_repo)
# version: 3.0 <24/06/08> (prise en charge des RedHat 5Ux et nouveau PATH d'acces aux repository RH)
# version: 4.0 <19/08/08> (support du fonctionnement en cluster: test si le script s'execute avec l'@IP associée à linux-rep.truc.fr + modif repo_path)
# Note: les noms des repertoires des distributions RedHat doivent contenir la version sous la forme "_XUY_" ou X est la release majeur et Y la mineure
# Note2: ces repertoires doivent contenir un sous-rep nomme "full" contenant quelque part les RPMs
# Il s'agit generalement des images ISOs des releases directement extraites.
# Note3: les RH5 fournissent deja un espace metadata pour chaque produit sur le DVD (Cluster, Server, etc), contenant le fichier comps_xxxx.xml
REPO_MNT_PT="/mnt/drivers"
REPO_PATH=""
CREA_REPO_CMD="/usr/bin/createrepo -d"
LOG_FILE="/var/log/maj_yum_repo.log"
update_repo()
{
# $1 = path du repo
# on exploite les groupes de paquets si le fichier les referencant existe
if echo "$1" | grep -q "_4U._"
then
# RH4
COMPS_XML_FILE=`find "$1" -name "comps*xml" -a ! -path "${1}/repodata/*"`
elif echo "$1" | grep -q "_5U._"
then
# RH5
COMPS_XML_FILE=`find "$1" -name "comps*xml"`
else
COMPS_XML_FILE=""
fi
if [ -r "$COMPS_XML_FILE" ]
then
CREA_REPO_CMD="/usr/bin/createrepo -d -g $COMPS_XML_FILE"
else
CREA_REPO_CMD="/usr/bin/createrepo -d"
fi
# si les metadata deja presente, on update
if [ -d "${1}/repodata" ]
then
echo "Debut de MAJ des metadata du repository [${1}]" >> $LOG_FILE
${CREA_REPO_CMD} --update "$1"
else
echo "Debut de creation des metadata du repository [${1}]" >> $LOG_FILE
${CREA_REPO_CMD} "$1"
fi
echo "MAJ du repository [${1}] termine" >> $LOG_FILE
}
# Corps principal du Script
# vérification que le script se lance sur la machine avec l'@IP associée à linux-rep.truc.fr
IP_LINUX_REP=`nslookup linux-rep.truc.fr | grep Address | grep -v '#' | cut -d ' ' -f 2`
if ! ip a sh | grep -q "$IP_LINUX_REP"
then
exit
fi
touch $LOG_FILE
echo "" >> $LOG_FILE
echo "Debut execution MAJ des repositories: `date +%c`" >> $LOG_FILE
echo "Remontage en RW de $REPO_MNT_PT" >> $LOG_FILE
/bin/mount -o remount,rw "$REPO_MNT_PT"
# Repositories RedHat
REPO_PATH="/var/ftp/labtech/labtech_drivers/Distrib_Linux/RedHat"
# repo RH 4Ux
for DIR in `ls -1 "$REPO_PATH" | grep "_4U._"`
do
THIS_REPO_PATH="${REPO_PATH}/${DIR}/full"
if [ -d "$THIS_REPO_PATH" ]
then
echo "Trouve un repository RH 4Ux valide dans ${THIS_REPO_PATH}" >> $LOG_FILE
update_repo "${THIS_REPO_PATH}"
else
echo "Trouve un repository RH 4Ux potentiel NON valide dans ${REPO_PATH}/${DIR}" >> $LOG_FILE
fi
done
# repo RH 5Ux
for DIR in `ls -1 "$REPO_PATH" | grep "_5U._"`
do
if [ -d "${REPO_PATH}/${DIR}/full" ]
then
echo "Trouve un repository RH 5Ux valide dans ${REPO_PATH}/${DIR}/full" >> $LOG_FILE
# seuls les sous-repertoire contenant deja un repodata comme Server,Cluster, etc sont valides
for DIR2 in `ls -1 "${REPO_PATH}/${DIR}/full"`
do
THIS_REPO_PATH="${REPO_PATH}/${DIR}/full/${DIR2}"
if [ -d "${THIS_REPO_PATH}/repodata" ]
then
update_repo "${THIS_REPO_PATH}"
fi
done
else
echo "Trouve un repository RH 5Ux potentiel NON valide dans ${REPO_PATH}/${DIR}" >> $LOG_FILE
fi
done
# Repositories prive
REPO_PATH="/var/ftp/labtech/labtech_drivers/Distrib_Linux/prive"
CREA_REPO_CMD="/usr/bin/createrepo -d"
for DIR in `ls -1 "$REPO_PATH"`
do
for ARCH in `ls -1 "$REPO_PATH/${DIR}"`
do
THIS_REPO_PATH="${REPO_PATH}/${DIR}/${ARCH}"
echo "Trouve un repository dans ${THIS_REPO_PATH}" >> $LOG_FILE
update_repo "${THIS_REPO_PATH}"
done
done
echo "Remontage en RO de $REPO_MNT_PT" >> $LOG_FILE
/bin/mount -o remount,ro "$REPO_MNT_PT"
echo "Fin execution MAJ des repositories: `date +%c`" >> $LOG_FILE
|
_________________ -TrueNAS & jails: µ-serv Gen8 E3-1260L, 16Go ECC + µ-serv N40L, 10Go ECC
-Réseau: APU2C4 (OpenWRT) + GS726Tv3 + 2x GS108Tv2 + Archer C5v1 (OpenWRT) |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|