Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Howto] Server Yum pour RedHat, CentOS, SuSE...
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
El_Goretto
Advocate
Advocate


Joined: 29 May 2004
Posts: 2872
Location: Paris

PostPosted: Tue Aug 19, 2008 1:25 pm    Post subject: [Howto] Server Yum pour RedHat, CentOS, SuSE... Reply with quote

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

_________________
-PC: 2500K/P8Z68V, 8Go, R9-290, ARC1220+5xWD500RE3, M4 256Go
-Home servers (hardened): µ-serv N40L, 2Go ECC ; NF9D-2700, 4Go ; DS61, i3 2100T, 16Go
-Réseau: ERL-3 + 3x switches GS108Tv2
-NAS: RN312
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
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