Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 30/06/2010, à 15:44

Tomzz

Cloner sélectivement un disque de miroir des dépots.

[edit]Voilà un lien qui en dit un peu plus sur le fonctionnement de ce script.

Bonjour,
Suite à cette discussion, j'ai réalisé un disque miroir des dépôts Ubuntu selon cette méthode.

Je cherche à mettre en place une méthode de copie sélective du disque obtenu qui respecte architecture du disque initial.
Je m'explique:
J'ai réalisé un disque de 250Go, contenant les dépots Karmic et Lucid 32 et 64 bits, comment faire pour copier uniquement les dépôts Lucid 32 bits sur un disque 80Go en respectant la même arborescence de façon à ce que l'utilisateur final puisse utiliser le disque d'origine ou sa copie sans devoir changer le sources.list.

J'ai tenté en passant par un serveur http et apt-mirror et même avec un jeu de lien symbolique je ne parviens pas à conserver la même arborescence.
Rsync me parait aussi intéressant mais je ne sais pas comment sélectionner les fichier à copier.

Si quelqu'un a une idée...

J'ai un autre problème à résoudre c'est pour générer de petits supports contenant les mises à jour des dépôts depuis l'envoi du disque miroir, la je n'ai pas d'idée du tout, mais j'ouvrirai surement un nouveau fil sur cette question une fois le premier problème résolu.

Ces scripts ne fonctionnent que si ils sont lancés depuis un terminal et après la commande:

sudo -s

[edit du 29/09/2010 10h30]: Voila où j'en suis, le second script pour la mise à jour fonctionne lui aussi.
Ça va évoluer tous les conseils de towcats n'ont pas encore été pris en compte
Attention, cela ne marche que si les disques cible et source sont formatés en ext2-3 ou 4.

#!/bin/bash
#

## supprime les fichiers temporaires au cas ou il en resterai d'une précédante utilisation
rm -f $HOME/scripts/apt-mirror/tmp/*

## Sauvegarde du fichier hosts
cp /etc/hosts $HOME/scripts/apt-mirror/hosts.org



########## choix du disque source à copier ##########
cpt1=0
for sour in `ls /media/`; do
    lsou[$cpt1]="FALSE /media/$sour "
    ((cpt1++))
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
    --title="Disque source" \
    --text="Disque source des dépôts" \
    --column="" \
    ${lsou[@]}) || exit
source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à copier n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
    {
        source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config") || exit
        source=${source1%/miroir/apt-m*}
    }
fi



########## établi la liste des distributions dont les dépots sont proposés sur le disque ##########
awk '$1 ~ /deb/ {gsub(/-.*|\.\//,""); print $3}' "${source1}" | grep "^[^#|^$|^ *$]" | uniq > $HOME/scripts/apt-mirror/tmp/dist-dispo1

## On compare le résultat obtenu avec la liste des realase d'Ubuntu (disponible dans $HOME/scripts/apt-mirror/list.distrib) pour ne garder que ce qui est commun aux deux fichiers
perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' $HOME/scripts/apt-mirror/tmp/dist-dispo1 /home/tomzz/scripts/apt-mirror/list.distrib > $HOME/scripts/apt-mirror/tmp/dist-dispo



########## Choix de la ou des distributions pour lesquelles on va copier les dépots ##########
cpt1=0

            for dis in $(cat $HOME/scripts/apt-mirror/tmp/dist-dispo); do
                    ub[$cpt1]="FALSE $dis "
                    ((cpt1++))
            done
                    ub[$cpt1]="FALSE Général"

                dist=$(zenity --width=400 --height=800 --list --column "" --checklist\
                --title="Distributions" \
                --text="Choix des distributions" \
                --column="" \
                ${ub[@]}) || exit



##########Choix des dépots correspondant à ou aux distributions choisies ##########
gr="$(sed 's/ //g' $HOME/scripts/apt-mirror/tmp/dist-dispo)"
gr="egrep -v '$(echo $gr | sed 's/ /|/g')'"
dist1="$(echo $dist | sed 's/|/ /g')"

        grep "^deb" "${source1}" > $HOME/scripts/apt-mirror/tmp/dep-dispo-dist1


    for dist2 in $dist1; do
        grep "^deb" "${source1}" | grep $dist2 | sed 's/\$/\\n/g' >> $HOME/scripts/apt-mirror/tmp/dep-dispo-dist
        ## Cas des dépots non liées à une version
        if [ $dist2 = "Général" ]; then
            {
                eval $gr $HOME/scripts/apt-mirror/tmp/dep-dispo-dist1 >> $HOME/scripts/apt-mirror/tmp/dep-dispo-dist
            }
        fi
    done



########## Choix de la ou des architechtures ##########
arch=$(zenity --list --column "" --checklist --title="Architechtures" --text="Choix des architechture" --column="" FALSE 64bits TRUE 32bits) || exit
arch1="$(echo $arch | sed 's;|; ;g' | sed 's;32bits;deb ;g' | sed 's;64bits;deb-amd64;g')"

    for arch2 in $arch1; do

        if [ $arch2 = "deb" ]; then
            {
                ## 32 bits
                grep -v amd64 "$HOME/scripts/apt-mirror/tmp/dep-dispo-dist" | sed 's/\$/\\n/g' >> $HOME/scripts/apt-mirror/tmp/dep-choisis
            }
        else
            {
                ## 64 bits
                grep amd64 "$HOME/scripts/apt-mirror/tmp/dep-dispo-dist" | sed 's/\$/\\n/g' >> $HOME/scripts/apt-mirror/tmp/dep-choisis
            }
        fi

    done



########## Choix des dépots disponibles dans la distribution et l'architechture choisie ##########

sed 's/ /\°/g' $HOME/scripts/apt-mirror/tmp/dep-choisis > $HOME/scripts/apt-mirror/tmp/dep-dispo-dist-choix

cpt1=0

            for dp in $(cat $HOME/scripts/apt-mirror/tmp/dep-dispo-dist-choix); do
                    ldp[$cpt1]="TRUE $dp "
                    ((cpt1++))
            done

            tab=$(zenity --width=600 --height=800 --list --column "" --checklist\
                --title="Selection des dépots" \
                --text="Cochez les dépots à copier" \
                --column="" \
                ${ldp[@]}) || exit

            tab2="$(echo $tab | sed 's/|/\n/g')"

            echo $tab2 | sed 's/ deb/\ndeb/g' > $HOME/scripts/apt-mirror/tmp/dep-choisis



########## Détermination des URL des dépots choisis et préparation des informations de nettoyage qui seront intégrées à apt-mirror-config ##########
            sed 's/°/ /g' $HOME/scripts/apt-mirror/tmp/dep-choisis | awk '{ print $2 }' | sed 's/\/$/\n/g' | sed 's/^$//g' | sed 's/http:\/\///g' | sort | uniq > $HOME/scripts/apt-mirror/tmp/clean-temp
            sed -i '/^$/d' $HOME/scripts/apt-mirror/tmp/clean-temp
            sed 's/\// /g' $HOME/scripts/apt-mirror/tmp/clean-temp | awk '{ print $1 }' | sort | uniq > $HOME/scripts/apt-mirror/tmp/dep-url



########## Préparation d'Apache ##########
            mv /var/www /var/www.org
            ln -s ${source}/miroir/mirror /var/www

            ## Création des virtualhost pour Apache correspondants aux dépots choisis
            for virt in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
                sed "s/nom-du-depot/${virt}/g" $HOME/scripts/apt-mirror/virtualhost.model > /etc/apache2/sites-available/${virt}
                echo "127.0.0.1    ${virt}" >> $HOME/scripts/apt-mirror/host.crea
            done

            ## Modification du ficher hosts en concéquance des choix
            echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> $HOME/scripts/apt-mirror/host.crea
            sed 's/\$/\\n/g' /etc/hosts >> $HOME/scripts/apt-mirror/host.crea

            ## mise en place du nouveau fichier host
            rm /etc/hosts
            mv $HOME/scripts/apt-mirror/host.crea /etc/hosts

            ## Activation des virtualhosts
            for virth in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
                a2ensite ${virth}
            done

            ## redémarrage d'Apache
            /etc/init.d/apache2 reload


########## Choix du disque qui va recevoir la copie ##########
cpt1=0
for lst in `ls /media/`; do

    ## La condition if assure de ne pas proposer le disque choisi comme source pour recevoir la copie.
    if [ "/media/${lst}" != ${source} ]; then
        {
            dsk[$cpt1]="FALSE /media/$lst "
            ((cpt1++))
        }
    fi
done

            disqc=$(zenity --width=400 --height=800 --list --column "" --radiolist\
                --title="Disque cible" \
                --text="Destination de la copie" \
                --column="" \
                ${dsk[@]})


########## Préparation du disque cible ##########

## Création de l'arboressance du nouveau disque
mkdir -p $disqc/miroir/{mirror,skel,var}
## Crée un lanceur rapide de mise à jour dans le nouveau disque de dépots
echo "[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Icon[fr_FR]=gnome-panel-launcher
Exec=xterm -e apt-mirror $disqc/miroir/apt-mirror-config &
Name[fr_FR]=Mise à jour des dépôts
Name=Mise à jour des dépôts
Icon=/usr/share/icons/gnome/48x48/stock/net/stock_mail-import.png" > $disqc/miroir/'Mise à jour des dépôts.desktop'
chmod +rx $disqc/miroir/'Mise à jour des dépôts.desktop'

## Copie des divers fichiers utiles
cp -R ${source}/configs $disqc/
cp -R ${source}/clefs-depots $disqc/


########## Création du fichier de configuration d'apt-mirror pour le disque cible en fonction des choix précédents ##########

## Entête du fichier adaptée au nouveau disque
echo "############# config ##################
#
set base_path    $disqc/miroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path  \$base_path/mirror
set skel_path    \$base_path/skel
set var_path     \$base_path/var
set cleanscript \$base_path/clean.sh
set defaultarch  i386
set postmirror_script \$base_path/postmirror.sh
set run_postmirror 0
set nthreads     10
set _tilde 0
#
############# end config ##############


" > $disqc/miroir/apt-mirror-config

## Ajout des dépots sélectionnés
sed 's/°/ /g' $HOME/scripts/apt-mirror/tmp/dep-choisis >> $disqc/miroir/apt-mirror-config

## Ajout de la fonction clean d'apt-mirror pour chaqu'un des dépots choisis
echo -e "\n\n\n## nettoyage des paquets obsolètes ##\n\n"  >> $disqc/miroir/apt-mirror-config
sed 's/^$//g' $HOME/scripts/apt-mirror/tmp/clean-temp | sed 's/^/clean http:\/\//g' >> $disqc/miroir/apt-mirror-config



########## Création des exemples de sources.list utilisables avec le nouveau disque créé ##########
disqc1=$(echo $disqc | sed 's/\//\\\//g')
    for dist3 in $dist1; do
        grep ^deb $HOME/scripts/apt-mirror/tmp/dep-choisis | grep $dist3 | sed 's/-amd64//g' | sed 's/°/ /g' | sed 's/deb /\ndeb /g' > $disqc/configs/sources.list.$dist3.1
        grep ^deb $HOME/scripts/apt-mirror/tmp/dep-choisis | eval $gr | sed 's/-amd64//g' | sed 's/°/ /g' | sed 's/deb /\ndeb /g' >> $disqc/configs/sources.list.$dist3.1
        sort $disqc/configs/sources.list.$dist3.1 | uniq > $disqc/configs/sources.list.$dist3
        rm $disqc/configs/sources.list.$dist3.1
    done

########## Création de la copie ##########
apt-mirror $disqc/miroir/apt-mirror-config

## ré-attribution des droits sur le disque
chmod -R 777 $disqc/miroir/

########## Nettoyage du disque ##########
cd $disqc/miroir/
./clean.sh



########## Remise en état d'origine pour Apache ##########

## les conditions if s'assurent de l'existance des fichier de sauvegardes
if [ -e /var/www.org ]; then
    {
        rm /var/www
        mv /var/www.org /var/www
    }
else
    {
        zenity    --warning --text="La sauvegarde de votre dossier /var/www n'a pas été trouvée, veuillez contrôler.\nApache n'a pas été remis en état d'origine."
    }
fi

if [ -e $HOME/scripts/apt-mirror/hosts.org ]; then
    {
        rm /etc/hosts
        mv $HOME/scripts/apt-mirror/hosts.org /etc/hosts
    }
else
    {
        zenity    --warning --text="La sauvegarde de votre fichier /etc/hosts n'a pas été trouvée.\nVeuillez éditer celui-ci par vous même, pour le remettre en état d'origine."
    }
fi

## Désactivation des virtualhosts
for virts in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
    rm /etc/apache2/sites-enabled/${virts}
    rm /etc/apache2/sites-available/${virts}
done

## redémarrage d'Apache
/etc/init.d/apache2 reload

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/tmp/*


zenity --info --timeout=20 --text="L'opération est terminée"

exit 0

Le fichier virtualhosts.model

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName nom-du-depot

	DocumentRoot /var/www/nom-du-depot
	<Directory /var/www/nom-du-depot/>
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/nom-du-depot/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Et le script de mise à jour des dépots


Ce script fonctionne maintenant

#!/bin/bash
#

## supprime les fichiers temporaires au cas ou il en resterai d'une précédante utilisation
rm -f $HOME/scripts/apt-mirror/tmp/*


########## choix du disque à mettre à jour ##########
cpt1=0
for sour in `ls /media/`; do
    lsou[$cpt1]="FALSE /media/$sour "
    ((cpt1++))
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
    --title="Disque à traiter" \
    --text="Choix du disque à mettre à jour" \
    --column="" \
    ${lsou[@]}) || exit

source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à mettre à jour n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
    {
        source1=$(zenity --file-selection --title="Indiquez le fichier apt-mirror-config du disque à mettre à jour") || exit
        source=${source1%/miroir/apt-m*}
    }
fi

zenity    --question --ok-label="Internet" --cancel-label="Autre disque local" --text="Quelle est votre source de mises à jour"
majs=$?

if [ "$majs" = "1" ]; then
    {
            ## Sauvegarde du fichier hosts
            cp /etc/hosts $HOME/scripts/apt-mirror/hosts.org

## choix du disque source des mises à jour
            cpt1=0
            for lst in `ls /media/`; do

                ## La condition if assure de ne pas proposer le disque choisi comme cible.
                if [ "/media/${lst}" != ${source} ]; then
                    {
                        dsk[$cpt1]="FALSE /media/$lst "
                        ((cpt1++))
                    }
                fi
            done

            mirr=$(zenity --width=400 --height=800 --list --column "" --radiolist\
                --title="Disque source" \
                --text="Indiquez le disque source de la mise à jour" \
                --column="" \
                ${dsk[@]}) || exit

            mirr1="${mirr}/miroir/apt-mirror-config"

        ## Cas où le disque à mettre à jour n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
        if [ ! -e ${mirr1} ]; then
        {
            mirr1=$(zenity --file-selection --title="Indiquez le fichier apt-mirror-config du disque source de la mise à jour") || exit
            mirr=${mirr1%/miroir/apt-m*}
        }
        fi

            ## Détermination des URL des dépots choisis
            grep '^deb' $source1  | sed 's/ /\°/g' > $HOME/scripts/apt-mirror/tmp/dep-choisis

            ########## Détermination des URL des dépots choisis et préparation des informations de nettoyage qui seront intégrées à apt-mirror-config ##########
            sed 's/°/ /g' $HOME/scripts/apt-mirror/tmp/dep-choisis | awk '{ print $2 }' | sed 's/\/$/\n/g' | sed 's/^$//g' | sed 's/http:\/\///g' | sort | uniq > $HOME/scripts/apt-mirror/tmp/clean-temp
            sed -i '/^$/d' $HOME/scripts/apt-mirror/tmp/clean-temp
            sed 's/\// /g' $HOME/scripts/apt-mirror/tmp/clean-temp | awk '{ print $1 }' | sort | uniq > $HOME/scripts/apt-mirror/tmp/dep-url1

            ls ${mirr}/miroir/mirror > $HOME/scripts/apt-mirror/tmp/dep-url.dispo
            perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' $HOME/scripts/apt-mirror/tmp/dep-url.dispo $HOME/scripts/apt-mirror/tmp/dep-url1 > $HOME/scripts/apt-mirror/tmp/dep-url


########## Préparation d'Apache ##########
            mv /var/www /var/www.org
            ln -s ${mirr}/miroir/mirror /var/www

            ## Création des virtualhost pour Apache correspondants aux dépots choisis
            for virt in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
                sed "s/nom-du-depot/${virt}/g" $HOME/scripts/apt-mirror/virtualhost.model > /etc/apache2/sites-available/${virt}
                echo "127.0.0.1    ${virt}" >> $HOME/scripts/apt-mirror/host.crea
            done

            ## Modification du ficher hosts en concéquance des choix
            echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> $HOME/scripts/apt-mirror/host.crea
            sed 's/\$/\\n/g' /etc/hosts >> $HOME/scripts/apt-mirror/host.crea

            ## mise en place du nouveau fichier host
            rm /etc/hosts
            mv $HOME/scripts/apt-mirror/host.crea /etc/hosts

            ## Activation des virtualhosts
            for virth in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
                a2ensite ${virth}
            done

            ## redémarrage d'Apache
            /etc/init.d/apache2 reload

            ########## création d'un apt-mirror-config provisoire conforme aux dépots disponibles sur le disque source ##########

            ## copie du apt-mirror-config
            cp ${source1} $HOME/scripts/apt-mirror/tmp/
            cd $HOME/scripts/apt-mirror/tmp/

            ## extraction de l'entête de configuration
            csplit -z -q $HOME/scripts/apt-mirror/tmp/apt-mirror-config "/end config/1"
            mv $HOME/scripts/apt-mirror/tmp/xx00 $HOME/scripts/apt-mirror/tmp/apt-mirror-config.tmp

            ## extraction des dépots à traiter
            grep "^deb" $HOME/scripts/apt-mirror/tmp/xx01 > $HOME/scripts/apt-mirror/tmp/dep.tmp

            ## exctraction de la partie traitant les paquets obsolètes
            csplit -z -q $HOME/scripts/apt-mirror/tmp/apt-mirror-config "/nettoyage des paquets/"
            mv $HOME/scripts/apt-mirror/tmp/xx01 $HOME/scripts/apt-mirror/tmp/clean.tmp

            ## Extraction de la liste des dépôts disponibles sur le disque source
            grep "deb" ${mirr1} > $HOME/scripts/apt-mirror/tmp/dep1.tmp

            ## Comparaison entre les dépôts disponibles sur le disque sources et ceux à mettre à jour
            perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' $HOME/scripts/apt-mirror/tmp/dep1.tmp $HOME/scripts/apt-mirror/tmp/dep.tmp >> $HOME/scripts/apt-mirror/tmp/apt-mirror-config.tmp

            ## exctraction de la partie traitant les paquets obsolètes sur le disque source
            csplit -z -q ${mirr1} "/nettoyage des paquets/"

            ## Comparaison entre les parties traitant les paquets obsolètes sur le disque sources et celle sur celui à mettre à jour (cette ligne est commentée car si le disque cible contient le même dépot mais pour d'autres versions ou architectures ceux nons mis à jour sont supprimés par le clean)
            # perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' $HOME/scripts/apt-mirror/tmp/clean.tmp $HOME/scripts/apt-mirror/tmp/xx01 >> $HOME/scripts/apt-mirror/tmp/apt-mirror-config.tmp

            ## Sauvegarde du apt-mirror-config du disque à mettre à jour
            cp ${source1} "${source1}-bak"

            ## Mise en place du apt-mirror-config temporaire du disque à mettre à jour
            mv $HOME/scripts/apt-mirror/tmp/apt-mirror-config.tmp ${source1}
    }
    fi

########## Mise à jour du disque ##########
apt-mirror ${source1}

## ré-attribution des droits sur le disque
chmod -R 777 ${source}/miroir/

## Nettoyage du disque
cd ${source}/miroir/
./clean.sh

if [ -e "${source1}-bak" ]; then
    {
        # restauration du apt-mirror-config du disque à mettre à jour
        rm ${source1}
        mv "${source1}-bak" "${source1}"
    }
    fi


########## Remise en état d'origine pour Apache ##########
if [ "$majs" = "1" ]; then
    {

        ## les conditions if s'assurent de l'existance des fichier de sauvegardes
        if [ -e /var/www.org ]; then
            {
                rm /var/www
                mv /var/www.org /var/www
            }
        else
            {
                zenity    --warning --text="La sauvegarde de votre dossier /var/www n'a pas été trouvée, veuillez contrôler.\nApache n'a pas été remis en état d'origine."
            }
        fi

        if [ -e $HOME/scripts/apt-mirror/hosts.org ]; then
            {
                rm /etc/hosts
                mv $HOME/scripts/apt-mirror/hosts.org /etc/hosts
            }
        else
            {
                zenity    --warning --text="La sauvegarde de votre fichier /etc/hosts n'a pas été trouvée.\nVeuillez éditer celui-ci par vous même, pour le remettre en état d'origine."
            }
        fi

        ## Désactivation des virtualhosts
        for virts in $(cat $HOME/scripts/apt-mirror/tmp/dep-url); do
            rm /etc/apache2/sites-enabled/${virts}
            rm /etc/apache2/sites-available/${virts}
        done

        ## redémarrage d'Apache
        /etc/init.d/apache2 reload
    }
    fi

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/tmp/*


zenity --info --timeout=20 --text="L'opération est terminée"

exit 0

Dernière modification par Tomzz (Le 29/09/2010, à 12:22)

Hors ligne

#2 Le 04/08/2010, à 23:52

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonsoir,
Un p'tit up après plus d'un mois pour exposer une idée et clarifier ma demande.

Je voudrai, en fait créer une copie du disque de dépôts en utilisant directement apt-mirror et sans changer le fichier de configuration d'apt-mirror.

J'ai déjà une idée assez précise de comment je vais gérer une grande partie des soucis liées à cette méthode, mais j'ai un point bloquant.

Donc, j'expose ce point précis en espérant qu'il y ai une solution:

Pour créer ou mettre à jour les dépôts il suffit de lancer la commande

apt-mirror /media/Depot/miroir/apt-mirror-config

Cette commande utilise le fichier /media/Depot/miroir/apt-mirror-config que je voudrai immuable, que l'on lance la commande en étant connecté au net pour effectuer le téléchargementt des paquets mis à jour depuis le net, ou que je la lance pour copier un disque vers un autre en étant hors ligne.

Donc mon fichier de config contient, par exemple:

############# config ##################
#
set base_path    /media/Depot/miroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript $base_path/clean.sh
set defaultarch  i386
set postmirror_script $base_path/postmirror.sh
set run_postmirror 0
set nthreads     10
set _tilde 0
#
############# end config ##############

deb http://fr.archive.ubuntu.com/ubuntu lucid main restricted

apt-mirror va donc télécharger le dépôt http://fr.archive.ubuntu.com/ubuntu lucid main restricted sur le net.

J'aurais voulu, grâce un serveur http (je pense à Apache, mais il doit y avoir plus simple pour ça) que la requête de apt-mirror vers http://fr.archive.ubuntu.com/ubuntu soit redirigée directement et de façon transparente vers http://localhostfr.archive.ubuntu.com/ubuntu
Je ne sais pas quoi utiliser pour ça ni comment.

En fait je peux déjà faire des copies avec apt-mirror, sans la redirection, mais dans ce cas l'arborescence de la copie change par rapport à l'original, tous les dépôts se retrouvent dans un répertoire "localhost" et ça oblige à bidouiller les fichiers de config d'apt-mirror et à avoir des sources.list différant suivant si on utilise la copie ou l'original.

Ma question, pour le moment ne concerne que cette redirection pour le reste je pense pouvoir me débrouiller.

Pour dire comment, vite fait, je vais mettre une partition bootable sur le même disque que les dépots avec unes iso remastérisée contenant tout ce qu'il faut pour faire ces redirections et copies et quelques scripts pour des copie sélectives et pour la mise à jour.

Dernière modification par Tomzz (Le 04/08/2010, à 23:55)

Hors ligne

#3 Le 05/08/2010, à 01:18

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bon, je vais aller me coucher, mais demain je testerai ça:
De mes recherches j'ai imaginé ça:

1. J'installe Apache et je fais un lien symbolique nommé mirror dans /var/www et qui pointe vers media/Depot/miroir/mirror/ ou se trouvent les répertoires des dépôts téléchargés (répertoire fr.archive.ubuntu.com par exemple)

2. le met cette ligne dans le fichier /etc/hosts:

127.0.0.1/mirror/fr.archive.ubuntu.com	fr.archive.ubuntu.com

et une ligne de ce type pour chacun des dépôts.

Vous en pensez quoi ?

Hors ligne

#4 Le 09/08/2010, à 16:43

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonjour,
Voilà une autre version, avec un script de mise à jour en plus:

#!/bin/bash
#

## Sauvegarde du fichier hosts
cp /etc/hosts $HOME/scripts/apt-mirror/hosts.org

## choix du disque source à copier ##
cpt1=0
for sour in `ls /media/`; do
	lsou[$cpt1]="FALSE /media/$sour "
	let "cpt1 = $cpt1 + 1"
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
	--title="Disque source" \
	--text="Disque source des dépôts" \
	--column="" \
	${lsou[@]})
source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à copier n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
{
	source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config")
	echo ${source1} >  $HOME/scripts/apt-mirror/disque-source
	perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/disque-source > $HOME/scripts/apt-mirror/disque-source1
	source=$(cat $HOME/scripts/apt-mirror/disque-source1)
}
fi


## établi la liste des distributions dont les dépots sont proposés sur le disque
echo -e $(cat -E ${source1}	| grep ^deb | sed 's/\$/#\\n/g') > $HOME/scripts/apt-mirror/dist-dispo
perl -0777ne 'print for /http:(.*?)#/sg' $HOME/scripts/apt-mirror/dist-dispo > $HOME/scripts/apt-mirror/dist-dispo1

echo -e $(cat -E $HOME/scripts/apt-mirror/dist-dispo1 | sed 's/ /\\n/g' | sed 's/\//#/g') > $HOME/scripts/apt-mirror/dist-dispo
echo -e $(sort $HOME/scripts/apt-mirror/dist-dispo | grep -v '#' | grep -v '-' | grep -v 'main' | grep -v 'unive' | grep -v 'free' | grep -v 'restr' | grep -v 'stab' | grep -v 'test' | uniq) > $HOME/scripts/apt-mirror/dist-dispo

## Choix de la ou des distributions pour lesquelles on va copier les dépots
cpt1=0

			for dis in $(cat $HOME/scripts/apt-mirror/dist-dispo); do
					ub[$cpt1]="FALSE $dis "
					let "cpt1 = $cpt1 + 1"
			done
					ub[$cpt1]="FALSE Général"

				dist=$(zenity --width=400 --height=800 --list --column "" --checklist\
				--title="Distributions" \
				--text="Choix des distributions" \
				--column="" \
				${ub[@]})

## Choix des dépots correspondant à ou aux distributions choisies
gr="$(cat $HOME/scripts/apt-mirror/dist-dispo | sed 's; ;|;g' | sed 's;|; | grep -v ;g' | sed 's;^; grep -v ;g')"
dist1="$(echo $dist | sed 's;|; ;g')"

		echo -e $(cat -E ${source1}	| grep ^deb | sed 's/\$/\\n/g') > $HOME/scripts/apt-mirror/dep-dispo-dist1
	for dist2 in $dist1; do
		echo -e $(cat -E ${source1}	| grep ^deb | grep $dist2 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-dispo-dist
		if [ $dist2 = "Général" ]; then
		{
			## Cas des dépots non liées à une distribution Ubuntu
			diff $HOME/scripts/apt-mirror/dep-dispo-dist1 $HOME/scripts/apt-mirror/dep-dispo-dist | eval $gr | grep -E "[+-]" | sed 's/<//g' | sed 's/---//g' >> $HOME/scripts/apt-mirror/dep-dispo-dist
		}
		fi
	done

## Choix de la ou des architechtures
arch=$(zenity --list --column "" --checklist --title="Architechtures" --text="Choix des architechture" --column="" FALSE 64bits TRUE 32bits)
arch1="$(echo $arch | sed 's;|; ;g' | sed 's;32bits;deb ;g' | sed 's;64bits;deb-amd64;g')"

	for arch2 in $arch1; do

		if [ $arch2 = "deb" ]; then
			{
				## 32 bits
				echo -e $(cat -E $HOME/scripts/apt-mirror/dep-dispo-dist | grep -v amd64 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-choisis
			}
		else
			{
				## 64 bits
				echo -e $(cat -E $HOME/scripts/apt-mirror/dep-dispo-dist | grep amd64 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-choisis
			}
		fi

	done

## Choix des dépots disponibles dans la distribution et l'architechture choisie
echo -e $(sed 's/\ deb/\\ndeb/g' $HOME/scripts/apt-mirror/dep-choisis | sed -e "s/^ //g") > $HOME/scripts/apt-mirror/dep-choisis
echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/ /\°/g' | sed 's/\$/\ /g') > $HOME/scripts/apt-mirror/dep-dispo-dist-choix

cpt1=0

			for dp in $(cat $HOME/scripts/apt-mirror/dep-dispo-dist-choix); do
					ldp[$cpt1]="TRUE $dp "
					let "cpt1 = $cpt1 + 1"
			done

			tab=$(zenity --width=600 --height=800 --list --column "" --checklist\
				--title="Selection des dépots" \
				--text="Cochez les dépots à copier" \
				--column="" \
				${ldp[@]})

			tab2="$(echo $tab | sed 's;|;\n;g')"

			echo -e $tab2 > $HOME/scripts/apt-mirror/dep-choisis

			## Détermination des URL des dépots choisis
			perl -0777ne 'print for /deb-amd64°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis > $HOME/scripts/apt-mirror/dep-url
			perl -0777ne 'print for /deb°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis >> $HOME/scripts/apt-mirror/dep-url
			echo -e $(cat -E  $HOME/scripts/apt-mirror/dep-url | sed 's/http:\/\// #http:/g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			perl -0777ne 'print for /#(.*?)\//sg' $HOME/scripts/apt-mirror/dep-url > $HOME/scripts/apt-mirror/dep-url1
			echo -e $(cat $HOME/scripts/apt-mirror/dep-url1 | sed 's/http:/ http:\/\//g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			echo -e $(sort $HOME/scripts/apt-mirror/dep-url | uniq | sed 's/\http:\/\//\\n/g' | sed '/^$/d' | sed '/./!d' | sed 's/$//g' | sed 's/#//g') > $HOME/scripts/apt-mirror/dep-url

			echo -e $(cat $HOME/scripts/apt-mirror/dep-choisis | sed 's/\ deb/\\ndeb/g' | sed 's/\°/ /g') >  $HOME/scripts/apt-mirror/dep-choisis

			## Préparation d'Apache
			mv /var/www /var/www.org
			ln -s ${source}/miroir/mirror /var/www

			## Création des virtualhost pour Apache correspondants aux dépots choisis
			for virt in $(cat $HOME/scripts/apt-mirror/dep-url); do
				echo -e $(cat -E $HOME/scripts/apt-mirror/virtualhost.model | sed s/nom-du-depot/$virt/g | sed 's/\$/\\n/g') > /etc/apache2/sites-available/${virt}
				echo "127.0.0.1	${virt}" >> $HOME/scripts/apt-mirror/host.crea
			done

			## Modification du ficher hosts en concéquance des choix
			echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> $HOME/scripts/apt-mirror/host.crea
			echo -e $(cat -E /etc/hosts | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/host.crea

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/host.crea /etc/hosts

			## Activation des virtualhosts
			for virth in $(cat $HOME/scripts/apt-mirror/dep-url); do
				a2ensite ${virth}
			done

			/etc/init.d/apache2 reload


## Choix du disque qui va recevoir la copie
cpt1=0
for lst in `ls /media/`; do
	dsk[$cpt1]="FALSE /media/$lst "
	let "cpt1 = $cpt1 + 1"
done

			disqc=$(zenity --width=400 --height=800 --list --column "" --radiolist\
				--title="Disque cible" \
				--text="Destination de la copie" \
				--column="" \
				${dsk[@]})

## Création de l'arboressance du nouveau disque
mkdir -p $disqc/miroir/{mirror,skel,var}
## Copie des divers fichiers utiles
cp -R ${source}/configs $disqc/
cp -R ${source}/clefs-depots $disqc/

## Création du fichier de configuration d'apt-mirror en fonction des choix précédents
echo "############# config ##################
#
set base_path    $disqc/miroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path  \$base_path/mirror
set skel_path    \$base_path/skel
set var_path     \$base_path/var
set cleanscript \$base_path/clean.sh
set defaultarch  i386
set postmirror_script \$base_path/postmirror.sh
set run_postmirror 0
set nthreads     10
set _tilde 0
#
############# end config ##############


" > $disqc/miroir/apt-mirror-config

echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/\$/\\n/g') >> $disqc/miroir/apt-mirror-config

echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/deb //g' | sed 's/-amd64 //g' | sed 's/http:/#clean°http:/g' |sed 's/\$/\\n/g') > $disqc/miroir/clean-tmp

perl -0777ne 'print for /#(.*?) /sg' $disqc/miroir/clean-tmp > $disqc/miroir/clean-tmp1

echo "\n#\n" >> $disqc/miroir/clean-tmp1

echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean°/\\nclean /g' | sed 's/\/\\n/\\n/g' | sed 's/\$/\\n/g' ) > $disqc/miroir/clean-tmp1



echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean/\\nclean/g') >> $disqc/miroir/apt-mirror-config

## Création des exemples de sources.list utilisables avec le nouveau disque créé
disqc1=$(echo $disqc | sed 's/\//\\\//g')
	for dist3 in $dist1; do
		echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis	| grep ^deb | grep $dist3 | sed 's/-amd64//g' | sed 's/\$/\\n/g') > $disqc/configs/sources.list.$dist3
		echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis	| grep ^deb | eval $gr | sed 's/-amd64//g' | sed 's/\$/\\n/g') >> $disqc/configs/sources.list.$dist3
		echo -e $(sort $disqc/configs/sources.list.$dist3 | sed 's/deb /\\ndeb /g' | sed 's/ \\n/\\n/g' | sed 's/ \\n/\\n/g' | sed "s/http:\//file:\/\/$disqc1\/miroir\/mirror/g" | uniq) > $disqc/configs/sources.list.$dist3
	done


## Suppression des fichiers temporaires
rm -f $disqc/miroir/clean-tmp*

## Création de la copie
apt-mirror $disqc/miroir/apt-mirror-config

## Nettoyage du disque
cd $disqc/miroir/
./clean.sh


## Remise en état d'origine pour Apache
			rm /var/www
			mv /var/www.org /var/www

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/hosts.org /etc/hosts

			for virts in $(cat $HOME/scripts/apt-mirror/dep-url); do
				rm /etc/apache2/sites-enabled/${virts}
				rm /etc/apache2/sites-available/${virts}
			done

			/etc/init.d/apache2 reload

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/dep-dispo-dist*
rm -f $HOME/scripts/apt-mirror/dep-choisis
rm -f $HOME/scripts/apt-mirror/dep-url*
rm -f $HOME/scripts/apt-mirror/dist-dispo*
rm -f $HOME/scripts/apt-mirror/disque-source*

zenity	--question \
			--timeout=20\
			--ok-label="Oui"\
			--cancel-label=""\
			--text="L'opération est terminée"

exit 0

Le fichier virtualhosts.model

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName nom-du-depot

	DocumentRoot /var/www/nom-du-depot
	<Directory /var/www/nom-du-depot/>
		Options FollowSymLinks
		AllowOverride None
	</Directory>
	<Directory /var/www/nom-du-depot/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Et le script de mise à jour des dépots

#!/bin/bash
#

## choix du disque source à mettre à jour ##
cpt1=0
for sour in `ls /media/`; do
	lsou[$cpt1]="FALSE /media/$sour "
	let "cpt1 = $cpt1 + 1"
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
	--title="Disque à mettre à jour" \
	--text="Sélectionnez le disque à mettre à jour" \
	--column="" \
	${lsou[@]})
source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à mettre à jour n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
{
	source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config du disque à mettre à jour")
	echo ${source1} >  $HOME/scripts/apt-mirror/disque-source
	perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/disque-source > $HOME/scripts/apt-mirror/disque-source1
	source=$(cat $HOME/scripts/apt-mirror/disque-source1)
}
fi

zenity	--question --ok-label="Internet" --cancel-label="Autre disque local" --text="Quelle est votre source de mises à jour"
majs=$?

if [ "$majs" = "1" ]; then
	{
			mirr=$(zenity --width=400 --height=800 --list --column "" --radiolist\
			--title="Disque SOURCE des mises à jour" \
			--text="Sélectionnez le disque SOURCE des mises à jour" \
			--column="" \
			${lsou[@]})
		mirr1="${mirr}/miroir/apt-mirror-config"

		## Cas où le disque à mettre à jour n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
		if [ ! -e ${mirr1} ]; then
		{
			mirr1=$(zenity --file-selection --title="Indiquez l'apt-mirror-config du disque SOURCE")
			echo ${mirr1} >  $HOME/scripts/apt-mirror/disque-mirr
			perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/disque-mirr > $HOME/scripts/apt-mirror/disque-mirr1
			mirr=$(cat $HOME/scripts/apt-mirror/disque-mirr1)
		}
		fi

			## Détermination des URL des dépots choisis
			echo -e $(cat -E $source1 | grep ^deb | sed 's/\$/\\n/g') > $HOME/scripts/apt-mirror/dep-choisis

			echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/ /\°/g' | sed 's/\$/\ /g') > $HOME/scripts/apt-mirror/dep-choisis

			perl -0777ne 'print for /deb-amd64°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis > $HOME/scripts/apt-mirror/dep-url

			perl -0777ne 'print for /deb°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis >> $HOME/scripts/apt-mirror/dep-url

			echo -e $(cat -E  $HOME/scripts/apt-mirror/dep-url | sed 's/http:\/\// #http:/g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			perl -0777ne 'print for /#(.*?)\//sg' $HOME/scripts/apt-mirror/dep-url > $HOME/scripts/apt-mirror/dep-url1

			echo -e $(cat $HOME/scripts/apt-mirror/dep-url1 | sed 's/http:/ http:\/\//g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			echo -e $(sort $HOME/scripts/apt-mirror/dep-url | uniq | sed 's/\http:\/\//\\n/g' | sed '/^$/d' | sed '/./!d' | sed 's/$//g' | sed 's/#//g') > $HOME/scripts/apt-mirror/dep-url.temp

			ls ${mirr}/miroir/mirror > $HOME/scripts/apt-mirror/dep-url.dispo
			comm --nocheck-order -12 <(sort $HOME/scripts/apt-mirror/dep-url.dispo) <(sort $HOME/scripts/apt-mirror/dep-url.temp) > $HOME/scripts/apt-mirror/dep-url

			#diff -wU0 <(sort $HOME/scripts/apt-mirror/dep-url.dispo) <(sort $HOME/scripts/apt-mirror/dep-url.temp) | tail -n+3 > $HOME/scripts/apt-mirror/dep-url

			dispo=$(wc -l $HOME/scripts/apt-mirror/dep-url.dispo | cut -d' ' -f1)
			demand=$(wc -l $HOME/scripts/apt-mirror/dep-url | cut -d' ' -f1)
			if [ ${demand} -gt ${dispo} ]; then
			{
				zenity	--question --ok-label="Internet" --cancel-label="Autre disque local" --text="Tous les dépots à mettre à jour ne sont pas disponibles sur votre disque source"
			}
			fi
			echo ${demand}
			echo ${dispo}
			echo "tt"
			read
			exit 0


			## Préparation d'Apache
			mv /var/www /var/www.org
			ln -s ${mirr}/miroir/mirror /var/www

			## Création des virtualhost pour Apache correspondants aux dépots choisis
			for virt in $(cat $HOME/scripts/apt-mirror/dep-url); do
				echo -e $(cat -E $HOME/scripts/apt-mirror/virtualhost.model | sed s/nom-du-depot/$virt/g | sed 's/\$/\\n/g') > /etc/apache2/sites-available/${virt}
				echo "127.0.0.1	${virt}" >> $HOME/scripts/apt-mirror/host.crea
			done

			## Modification du ficher hosts en concéquance des choix
			echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> $HOME/scripts/apt-mirror/host.crea
			echo -e $(cat -E /etc/hosts | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/host.crea

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/host.crea /etc/hosts

			## Activation des virtualhosts
			for virth in $(cat $HOME/scripts/apt-mirror/dep-url); do
				a2ensite ${virth}
			done

			/etc/init.d/apache2 reload
	}
	fi

apt-mirror ${source1}

## Nettoyage du disque
cd ${source}/miroir/
./clean.sh

## Remise en état d'origine pour Apache
			rm /var/www
			mv /var/www.org /var/www

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/hosts.org /etc/hosts

			for virts in $(cat $HOME/scripts/apt-mirror/dep-url); do
				rm /etc/apache2/sites-enabled/${virts}
				rm /etc/apache2/sites-available/${virts}
			done

			/etc/init.d/apache2 reload

rm -f $HOME/scripts/apt-mirror/dep-url*
rm -f $HOME/scripts/apt-mirror/dep-choisis

zenity	--question \
			--timeout=20\
			--ok-label="Oui"\
			--cancel-label=""\
			--text="L'opération est terminée"

exit 0

En fait j'ai surtout des problèmes avec la comparaison de fichiers, commandes diff ou comm
PS: pour l'historique je laisse les anciennes versions ci-dessous
####################################################
Bonjour,
Une seconde version...
Celle là fonctionne correctement, mais j'ai bien conscience du coté extrêmement capilotracté de mes utilisations de sed, perl et autres big_smile

C'est à lancer dans un terminal après un sudo -s (attention, -s pour conserver les variables d'environnement de l'utilisateur normal)

#!/bin/bash
#

## Sauvegarde du fichier hosts
cp /etc/hosts $HOME/scripts/apt-mirror/hosts.org

## choix du disque source à copier ##
cpt1=0
for sour in `ls /media/`; do
	lsou[$cpt1]="FALSE /media/$sour "
	let "cpt1 = $cpt1 + 1"
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
	--title="Disque source" \
	--text="Disque source des dépôts" \
	--column="" \
	${lsou[@]})
source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à copier n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
{
	source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config")
	echo ${source1} >  $HOME/scripts/apt-mirror/disque-source
	perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/disque-source > $HOME/scripts/apt-mirror/disque-source1
	source=$(cat $HOME/scripts/apt-mirror/disque-source1)
}
fi


## établi la liste des distributions dont les dépots sont proposés sur le disque
echo -e $(cat -E ${source1}	| grep ^deb | sed 's/\$/#\\n/g') > $HOME/scripts/apt-mirror/dist-dispo
perl -0777ne 'print for /http:(.*?)#/sg' $HOME/scripts/apt-mirror/dist-dispo > $HOME/scripts/apt-mirror/dist-dispo1

echo -e $(cat -E $HOME/scripts/apt-mirror/dist-dispo1 | sed 's/ /\\n/g' | sed 's/\//#/g') > $HOME/scripts/apt-mirror/dist-dispo
echo -e $(sort $HOME/scripts/apt-mirror/dist-dispo | grep -v '#' | grep -v '-' | grep -v 'main' | grep -v 'unive' | grep -v 'free' | grep -v 'restr' | grep -v 'stab' | grep -v 'test' | uniq) > $HOME/scripts/apt-mirror/dist-dispo

## Choix de la ou des distributions pour lesquelles on va copier les dépots
cpt1=0

			for dis in $(cat $HOME/scripts/apt-mirror/dist-dispo); do
					ub[$cpt1]="FALSE $dis "
					let "cpt1 = $cpt1 + 1"
			done
					ub[$cpt1]="FALSE Général"

				dist=$(zenity --width=400 --height=800 --list --column "" --checklist\
				--title="Distributions" \
				--text="Choix des distributions" \
				--column="" \
				${ub[@]})

## Choix des dépots correspondant à ou aux distributions choisies
gr="$(cat $HOME/scripts/apt-mirror/dist-dispo | sed 's; ;|;g' | sed 's;|; | grep -v ;g' | sed 's;^; grep -v ;g')"
dist1="$(echo $dist | sed 's;|; ;g')"

		echo -e $(cat -E ${source1}	| grep ^deb | sed 's/\$/\\n/g') > $HOME/scripts/apt-mirror/dep-dispo-dist1
	for dist2 in $dist1; do
		echo -e $(cat -E ${source1}	| grep ^deb | grep $dist2 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-dispo-dist
		if [ $dist2 = "Général" ]; then
		{
			## Cas des dépots non liées à une distribution Ubuntu
			diff $HOME/scripts/apt-mirror/dep-dispo-dist1 $HOME/scripts/apt-mirror/dep-dispo-dist | eval $gr | grep -E "[+-]"  | sed 's/<//g' | sed 's/---//g' >> $HOME/scripts/apt-mirror/dep-dispo-dist
		}
		fi
	done

## Choix de la ou des architechtures
arch=$(zenity --list --column "" --checklist --title="Architechtures" --text="Choix des architechture" --column="" FALSE 64bits TRUE 32bits)
arch1="$(echo $arch | sed 's;|; ;g' | sed 's;32bits;deb ;g' | sed 's;64bits;deb-amd64;g')"

	for arch2 in $arch1; do

		if [ $arch2 = "deb" ]; then
			{
				## 32 bits
				echo -e $(cat -E $HOME/scripts/apt-mirror/dep-dispo-dist | grep -v amd64 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-choisis
			}
		else
			{
				## 64 bits
				echo -e $(cat -E $HOME/scripts/apt-mirror/dep-dispo-dist | grep amd64 | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/dep-choisis
			}
		fi

	done

## Choix des dépots disponnibles dans la distribution et l'architechture choisie
echo -e $(sed 's/\ deb/\\ndeb/g' $HOME/scripts/apt-mirror/dep-choisis | sed -e "s/^ //g") > $HOME/scripts/apt-mirror/dep-choisis
echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/ /\°/g' | sed 's/\$/\ /g') > $HOME/scripts/apt-mirror/dep-dispo-dist-choix

cpt1=0

			for dp in $(cat $HOME/scripts/apt-mirror/dep-dispo-dist-choix); do
					ldp[$cpt1]="TRUE $dp "
					let "cpt1 = $cpt1 + 1"
			done

			tab=$(zenity --width=600 --height=800 --list --column "" --checklist\
				--title="Selection des dépots" \
				--text="Cochez les dépots à copier" \
				--column="" \
				${ldp[@]})

			tab2="$(echo $tab | sed 's;|;\n;g')"

			echo -e $tab2 > $HOME/scripts/apt-mirror/dep-choisis

			## Détermination des URL des dépots choisis
			perl -0777ne 'print for /deb-amd64°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis > $HOME/scripts/apt-mirror/dep-url
			perl -0777ne 'print for /deb°(.*?)°/sg' $HOME/scripts/apt-mirror/dep-choisis >> $HOME/scripts/apt-mirror/dep-url
			echo -e $(cat -E  $HOME/scripts/apt-mirror/dep-url | sed 's/http:\/\// #http:/g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			perl -0777ne 'print for /#(.*?)\//sg' $HOME/scripts/apt-mirror/dep-url > $HOME/scripts/apt-mirror/dep-url1
			echo -e $(cat $HOME/scripts/apt-mirror/dep-url1 | sed 's/http:/ http:\/\//g' | sed 's/ /\\n/g') > $HOME/scripts/apt-mirror/dep-url

			echo -e $(sort $HOME/scripts/apt-mirror/dep-url | uniq | sed 's/\http:\/\//\\n/g' | sed '/^$/d' | sed '/./!d' | sed 's/$//g' | sed 's/#//g') > $HOME/scripts/apt-mirror/dep-url

			echo -e $(cat $HOME/scripts/apt-mirror/dep-choisis | sed 's/\ deb/\\ndeb/g' | sed 's/\°/ /g') >  $HOME/scripts/apt-mirror/dep-choisis

			## Préparation d'Apache
			mv /var/www /var/www.org
			ln -s ${source}/miroir/mirror /var/www

			## Création des virtualhost pour Apache correspondants aux dépots choisis
			for virt in $(cat $HOME/scripts/apt-mirror/dep-url); do
				echo -e $(cat -E $HOME/scripts/apt-mirror/virtualhost.model | sed s/nom-du-depot/$virt/g | sed 's/\$/\\n/g') > /etc/apache2/sites-available/${virt}
				echo "127.0.0.1	${virt}" >> $HOME/scripts/apt-mirror/host.crea
			done

			## Modification du ficher hosts en concéquance des choix
			echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> $HOME/scripts/apt-mirror/host.crea
			echo -e $(cat -E /etc/hosts | sed 's/\$/\\n/g') >> $HOME/scripts/apt-mirror/host.crea

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/host.crea /etc/hosts

			## Activation des virtualhosts
			for virth in $(cat $HOME/scripts/apt-mirror/dep-url); do
				a2ensite ${virth}
			done

			/etc/init.d/apache2 reload


## Choix du disque qui va recevoir la copie
cpt1=0
for lst in `ls /media/`; do
	dsk[$cpt1]="FALSE /media/$lst "
	let "cpt1 = $cpt1 + 1"
done

			disqc=$(zenity --width=400 --height=800 --list --column "" --radiolist\
				--title="Disque cible" \
				--text="Destination de la copie" \
				--column="" \
				${dsk[@]})

## Création de l'arboressance du nouveau disque
mkdir -p $disqc/miroir/{mirror,skel,var}
## Copie des divers fichiers utiles
cp -R ${source}/configs $disqc/
cp -R ${source}/clefs-depots $disqc/

## Création du fichier de configuration d'apt-mirror en fonction des choix précédents
echo "############# config ##################
#
set base_path    $disqc/miroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path  \$base_path/mirror
set skel_path    \$base_path/skel
set var_path     \$base_path/var
set cleanscript \$base_path/clean.sh
set defaultarch  i386
set postmirror_script \$base_path/postmirror.sh
set run_postmirror 0
set nthreads     10
set _tilde 0
#
############# end config ##############


" > $disqc/miroir/apt-mirror-config

echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/\$/\\n/g') >> $disqc/miroir/apt-mirror-config

echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis | sed 's/deb //g' | sed 's/-amd64 //g' | sed 's/http:/#clean°http:/g' |sed 's/\$/\\n/g') > $disqc/miroir/clean-tmp

perl -0777ne 'print for /#(.*?) /sg' $disqc/miroir/clean-tmp > $disqc/miroir/clean-tmp1

echo "\n#\n" >> $disqc/miroir/clean-tmp1

echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean°/\\nclean /g' | sed 's/\/\\n/\\n/g' | sed 's/\$/\\n/g' ) > $disqc/miroir/clean-tmp1



echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean/\\nclean/g') >> $disqc/miroir/apt-mirror-config

## Création des exemples de sources.list utilisables avec le nouveau disque créé
	for dist3 in $dist1; do
		echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis	| grep ^deb | grep $dist3 | sed 's/-amd64//g' | sed 's/\$/\\n/g') > $disqc/configs/sources.list.$dist3
		echo -e $(cat -E $HOME/scripts/apt-mirror/dep-choisis	| grep ^deb | eval $gr | sed 's/-amd64//g' | sed 's/\$/\\n/g') >> $disqc/configs/sources.list.$dist3
		echo -e $(sort $disqc/configs/sources.list.$dist3 | sed 's/deb /\\ndeb /g' | sed 's/ \\n/\\n/g' | sed 's/ \\n/\\n/g' | uniq) > $disqc/configs/sources.list.$dist3
	done


## Suppression des fichiers temporaires
rm -f $disqc/configs/sources.list.Général
rm -f $disqc/miroir/clean-tmp*

## Création de la copie
apt-mirror $disqc/miroir/apt-mirror-config

## Nettoyage du disque
cd $disqc/miroir/
./clean.sh


## Remise en état d'origine pour Apache
			rm /var/www
			mv /var/www.org /var/www

			rm /etc/hosts
			mv $HOME/scripts/apt-mirror/hosts.org /etc/hosts

			for virts in $(cat $HOME/scripts/apt-mirror/dep-url); do
				rm /etc/apache2/sites-enabled/${virts}
				rm /etc/apache2/sites-available/${virts}
			done

			/etc/init.d/apache2 reload

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/dep-dispo-dist*
rm -f $HOME/scripts/apt-mirror/dep-choisis
rm -f $HOME/scripts/apt-mirror/dep-url*
rm -f $HOME/scripts/apt-mirror/dist-dispo*
rm -f $HOME/scripts/apt-mirror/disque-source*

zenity	--question \
			--timeout=20\
			--ok-label="Oui"\
			--cancel-label=""\
			--text="L'opération est terminée"

exit 0

####################################################

Bonjour,
Je vous livre le premier jet "fonctionnel" de mon script de copie des disques de dépôts.
Je vais améliorer/ ajouter des fonctions, si quelqu'un a des suggestions elle sont bien venues.

Pour la manipulations des fichiers j'arrive à ce que je veux mais d'une manière, comment dire, pas très propre big_smile, là aussi les suggestions sont les bien venues.

#!/bin/bash
#

cp /etc/hosts /home/tomzz/scripts/apt-mirror/hosts.org

rm /home/tomzz/scripts/apt-mirror/test.txt
rm /home/tomzz/scripts/apt-mirror/test1.txt
rm /home/tomzz/scripts/apt-mirror/test2.txt
rm /home/tomzz/scripts/apt-mirror/test3.txt

dist=$(zenity --list --column "" --checklist --title="Distributions" --text="Choix des distributions" --column="" TRUE lucid FALSE karmic)
dist1="$(echo $dist | sed 's;|; ;g')"

	for dist2 in $dist1; do
		echo -e $(cat -E /media/Depot/miroir/apt-mirror-config	| grep ^deb | grep $dist2 | sed 's/\$/\\n/g') >> /home/tomzz/scripts/apt-mirror/test.txt
	done

arch=$(zenity --list --column "" --checklist --title="Architechtures" --text="Choix des architechture" --column="" FALSE 64bits TRUE 32bits)
arch1="$(echo $arch | sed 's;|; ;g' | sed 's;32bits;deb ;g' | sed 's;64bits;deb-amd64;g')"

	for arch2 in $arch1; do

		if [ $arch2 = "deb" ]; then
			{
				echo -e $(cat -E /home/tomzz/scripts/apt-mirror/test.txt | grep -v amd64 | sed 's/\$/\\n/g') >> /home/tomzz/scripts/apt-mirror/test1.txt
			}
		else
			{
				echo -e $(cat -E /home/tomzz/scripts/apt-mirror/test.txt | grep amd64 | sed 's/\$/\\n/g') >> /home/tomzz/scripts/apt-mirror/test1.txt
			}
		fi

	done

echo -e $(sed 's/\ deb/\\ndeb/g' /home/tomzz/scripts/apt-mirror/test1.txt | sed -e "s/^ //g") > /home/tomzz/scripts/apt-mirror/test1.txt
echo -e $(cat -E /home/tomzz/scripts/apt-mirror/test1.txt | sed 's/ /\°/g' | sed 's/\$/\ /g') > /home/tomzz/scripts/apt-mirror/test3.txt

cpt1=0

			for dp in $(cat /home/tomzz/scripts/apt-mirror/test3.txt); do
					ldp[$cpt1]="FALSE $dp "
					let "cpt1 = $cpt1 + 1"
			done

			tab=$(zenity --width=400 --height=800 --list --column "" --checklist\
				--title="Selection des dépots" \
				--text="Cochez les dépots à copier" \
				--column="" \
				${ldp[@]})

			tab2="$(echo $tab | sed 's;|;\n;g')"

			echo -e $tab2 > /home/tomzz/scripts/apt-mirror/test1.txt

			perl -0777ne 'print for /deb-amd64°(.*?)°/sg' /home/tomzz/scripts/apt-mirror/test1.txt > /home/tomzz/scripts/apt-mirror/test2.txt
			perl -0777ne 'print for /deb°(.*?)°/sg' /home/tomzz/scripts/apt-mirror/test1.txt >> /home/tomzz/scripts/apt-mirror/test2.txt
			echo -e $(cat -E  /home/tomzz/scripts/apt-mirror/test2.txt | sed 's/http:\/\// #http:/g' | sed 's/ /\\n/g') > /home/tomzz/scripts/apt-mirror/test2.txt

			perl -0777ne 'print for /#(.*?)\//sg' /home/tomzz/scripts/apt-mirror/test2.txt > /home/tomzz/scripts/apt-mirror/test4.txt
			echo -e $(cat -E  /home/tomzz/scripts/apt-mirror/test4.txt | sed 's/http:/ http:\/\//g' | sed 's/ /\\n/g') > /home/tomzz/scripts/apt-mirror/test2.txt

			# echo -e $(cat /home/tomzz/scripts/apt-mirror/test2.txt | sed 's/\http/\\nhttp/g') >  /home/tomzz/scripts/apt-mirror/test2.txt
			echo -e $(sort /home/tomzz/scripts/apt-mirror/test2.txt | uniq | sed 's/\http:\/\//\\n/g' | sed '/^$/d' | sed '/./!d') > /home/tomzz/scripts/apt-mirror/test2.txt

			echo -e $(cat /home/tomzz/scripts/apt-mirror/test1.txt | sed 's/\ deb/\\ndeb/g' | sed 's/\°/ /g') >  /home/tomzz/scripts/apt-mirror/test1.txt

			for virt in $(cat /home/tomzz/scripts/apt-mirror/test2.txt); do
				echo -e $(cat -E '/home/tomzz/scripts/apt-mirror/virtualhost.model' | sed s/nom-du-depot/$virt/g | sed 's/\$/\\n/g') > /etc/apache2/sites-available/${virt}
				echo "127.0.0.1	${virt}" >> /home/tomzz/scripts/apt-mirror/host.crea
			done

			echo -e "\n\n### fin ajout provisoire ##\n\n\n" >> /home/tomzz/scripts/apt-mirror/host.crea
			echo -e $(cat -E /etc/hosts | sed 's/\$/\\n/g') >> /home/tomzz/scripts/apt-mirror/host.crea

			rm /etc/hosts
			mv /home/tomzz/scripts/apt-mirror/host.crea /etc/hosts

			for virth in $(cat /home/tomzz/scripts/apt-mirror/test2.txt); do
				a2ensite ${virth}
			done

			/etc/init.d/apache2 reload



cpt1=0
for lst in `ls /media/`; do
	dsk[$cpt1]="FALSE /media/$lst "
	let "cpt1 = $cpt1 + 1"
done

			disqc=$(zenity --width=400 --height=800 --list --column "" --radiolist\
				--title="Disque cible" \
				--text="Destination de la copie" \
				--column="" \
				${dsk[@]})

mkdir -p $disqc/miroir/{mirror,skel,var}
cp -R /media/Depot/configs $disqc/
cp -R /media/Depot/clefs-depots $disqc/

echo "############# config ##################
#
set base_path    $disqc/miroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path  \$base_path/mirror
set skel_path    \$base_path/skel
set var_path     \$base_path/var
set cleanscript \$base_path/clean.sh
set defaultarch  i386
set postmirror_script \$base_path/postmirror.sh
set run_postmirror 0
set nthreads     10
set _tilde 0
#
############# end config ##############


" > $disqc/miroir/apt-mirror-config

echo -e $(cat -E /home/tomzz/scripts/apt-mirror/test1.txt | sed 's/\$/\\n/g') >> $disqc/miroir/apt-mirror-config

echo -e $(cat -E /home/tomzz/scripts/apt-mirror/test1.txt | sed 's/deb //g' | sed 's/-amd64 //g' | sed 's/http:/#clean°http:/g' |sed 's/\$/\\n/g') > $disqc/miroir/clean-tmp

perl -0777ne 'print for /#(.*?) /sg' $disqc/miroir/clean-tmp > $disqc/miroir/clean-tmp1

echo "\n#\n" >> $disqc/miroir/clean-tmp1

echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean°/\\nclean /g' | sed 's/\/\\n/\\n/g' | sed 's/\$/\\n/g' ) > $disqc/miroir/clean-tmp1



echo -e $(sort $disqc/miroir/clean-tmp1 | uniq | sed 's/clean/\\nclean/g') >> $disqc/miroir/apt-mirror-config

rm $disqc/miroir/clean-tmp*

apt-mirror $disqc/miroir/apt-mirror-config


			rm /etc/hosts
			mv /home/tomzz/scripts/apt-mirror/hosts.org /etc/hosts

			for virts in $(cat /home/tomzz/scripts/apt-mirror/test2.txt); do
				rm /etc/apache2/sites-enabled/${virts}
				rm /etc/apache2/sites-available/${virts}
			done

			/etc/init.d/apache2 reload

Dernière modification par Tomzz (Le 04/09/2010, à 17:00)

Hors ligne

#5 Le 17/09/2010, à 17:55

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonjour,
Un p'tit up, parce que j'ai vraiment besoin d'aide, je suis un peu dans le sac avec les comparaisons de fichiers. (je tiens le premier post à jour)

Sur le même sujet je cherche à obtenir une "photo instantanée" des paquets présents sur un disque de dépôts, pour ensuite pouvoir télécharger uniquement les nouvelles mises à jour et les envoyer afin de les intégrer sur le disque d'origine (que bien sûr je n'ai plus sous la main).

Hors ligne

#6 Le 17/09/2010, à 18:51

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Useless use of cat (des dizaines de fois).
Simplifie ton code; exemple tout bête :

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/dep-dispo-dist*
rm -f $HOME/scripts/apt-mirror/dep-choisis
rm -f $HOME/scripts/apt-mirror/dep-url*
rm -f $HOME/scripts/apt-mirror/dist-dispo*
rm -f $HOME/scripts/apt-mirror/disque-source*

Place tout tes fichiers temporaires dans un seul dossier :

$HOME/scripts/apt-mirror/tmp

Et supprime-les tous à la fois :

rm -f $HOME/scripts/apt-mirror/tmp/*

La réponse est 42

Hors ligne

#7 Le 26/09/2010, à 17:52

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

[edit] je viens de reprendre le premier script (voir premier post) en essayant de suivre les conseils de towcats.
Je me suis tourné vers perl pour les filtres pour les fichiers parce que même si j'ai encore plus de mal pour la syntaxe, j'en comprend mieux le fonctionnement.

Tous les avis sont les bien venus.
Merci



Bonsoir,
Bon je reviens sur ce script...

Merci towcat, effectivement je viens de découvrir que grep peut traiter un fichier directement big_smile
En fait, je me débrouille avec le man et mon très mauvais anglais, alors quand ça marche à force de tâtonnement je fais avec.

Demain, j'essaie d'alléger tout ça, ça me permettra peut être de trouver ou ça coince dans mes comparaisons de fichiers, et accessoirement de sortir un truc plus lisible pour demander de l'aide.

Sinon, pour ça:

## Suppression des fichiers temporaires
rm -f $HOME/scripts/apt-mirror/dep-dispo-dist*
rm -f $HOME/scripts/apt-mirror/dep-choisis
rm -f $HOME/scripts/apt-mirror/dep-url*
rm -f $HOME/scripts/apt-mirror/dist-dispo*
rm -f $HOME/scripts/apt-mirror/disque-source*

C'est volontaire, je simplifierai quand ça marchera, car là, ça me permet de commenter les lignes individuellement afin de pouvoir regarder le contenu des fichiers temporaires et de voir à quel niveau les erreurs sont apparues.

Hors ligne

#8 Le 27/09/2010, à 00:21

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Si j'ai bien compris ce que tu veux faire ici :

########## établi la liste des distributions dont les dépots sont proposés sur le disque ##########

## On ne sélectionne que les lignes d'adresses de dépôts et on ajoute 3 caractères # à la fin de la ligne pour le traitement
grep "^deb" "${source1}" | sed 's/$/###\n/g' > $HOME/scripts/apt-mirror/tmp/dist-dispo

## On ne concerve que ce qui est compris entre http et la fin de la ligne
perl -0777ne 'print for /http:(.*?)\n/sg' $HOME/scripts/apt-mirror/tmp/dist-dispo > $HOME/scripts/apt-mirror/tmp/dist-dispo1

## On élimine tout ce qui est compris entre // et un espace
perl -0777 -pe 's{//.*? }{}gs' $HOME/scripts/apt-mirror/tmp/dist-dispo1 > $HOME/scripts/apt-mirror/tmp/dist-dispo

## On élimine tout ce qui est compris entre un espace et le caractère #
perl -0777 -pe 's{ .*?#}{}gs' $HOME/scripts/apt-mirror/tmp/dist-dispo > $HOME/scripts/apt-mirror/tmp/dist-dispo1

## On élimine tout ce qui est compris entre le caractère - et le caractère #
perl -0777 -pe 's{-.*?#}{}gs' $HOME/scripts/apt-mirror/tmp/dist-dispo1 > $HOME/scripts/apt-mirror/tmp/dist-dispo

## On remplace le caractère # par un saut de ligne
sed 's/#/\n/g' $HOME/scripts/apt-mirror/tmp/dist-dispo > $HOME/scripts/apt-mirror/tmp/dist-dispo1

C'est d'obtenir la liste des distributions contenues dans un fichier 'apt-mirror-config' comme donné en exemple dans le tuto. Dans ce cas tu devrais avoir un résultat équivalent à ce que tu cherches avec :

awk '$1 ~ /deb/ {gsub(/-.*|\.\//,""); print $3}' "${source1}" | grep "^[^#|^$|^ *$]" | uniq > $HOME/scripts/apt-mirror/tmp/dist-dispo1

Cela devrai te sortir :

karmic
lucid

Ton code est dur à déboguer car tu ne donnes pas les fichiers sur lesquels tu travail, ni le format de sortie que tu veux obtenir. De plus ta comparaison à la fin se fait sur un fichier que tu es le seul à posséder et tes chemins sont en dur !


La réponse est 42

Hors ligne

#9 Le 27/09/2010, à 11:51

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

[edit] J'ai commencé à travailler sur un wiki au sujet de ce script

Bonjour,
Merci towcats !

Alors, j'essaie de comprendre ta ligne:

awk '$1 ~ /deb/ {gsub(/-.*|\.\//,""); print $3}' "/media/Depot/miroir/apt-mirror-config" | grep "^[^#|^$|^ *$]" | uniq > $HOME/scripts/apt-mirror/tmp/dist-dispo1

$1 = champs N°1 de la ligne
~ /deb/ filtre sur deb
=>  $1 ~ /deb/ ne prend que les lignes dont le premier champs est égal à deb

gsub(/-.*|\.\//,"")
J'ai trouvé ça:      gsub(r,s,t)  sur la chaine t, remplace toutes les occurrence de r par s
mais je ne comprend pas quels caractères sont traités (correspondances entre (r,s,t) et (/-.*|\.\//,"")


print $3
Je ne comprend pas bien non plus, il me semble que ça veux dire que le résultat de gsub(/-.*|\.\//,"") vient remplacer le champ 3

grep "^[^#|^$|^ *$]" "/media/Depot/miroir/apt-mirror-config" > $HOME/scripts/apt-mirror/tmp/dist-dispo1

Si j'ai bien compris, le premier ^ indique de faire l'inverse de ce qui est indiqué entre les [], c'est à dire:
ne pas prendre les lignes commentées, ^# (ligne qui commence par #)
ne pas prendre les lignes vides, ^$ (lignes avec rien entre le début ^ et la fin $)
ne pas prendre les lignes qui commencent par un espace ^ *$ ( "^ "=un espace au début *=n'importe quels caractère en nombre indéfini mais pas 0 et $=fin de ligne)

Du coup, une question, est ce que ceci, grep -v '^#|^$|^ *$' fait la même chose

Ta ligne, fonctionne, mais je crois qu'il manque la prise en compte des dépôts deb-amd64 du apt-mirror-config.

Pour répondre à tes questions:

C'est d'obtenir la liste des distributions contenues dans un fichier 'apt-mirror-config' comme donné en exemple dans le tuto. Dans ce cas tu devrais avoir un résultat équivalent à ce que tu cherches avec :

C'est exactement ça, et le résultat de ta ligne (comme de mon shmilblik perl) est:

stable
testing
karmic
lucid

Je la compare ensuite avec list.distrib qui lui est figé (enfin jusqu'en avril 2011) et qui contient:

warty
hoary
breezy
dapper
edgy
feisty
gutsy
hardy
intrepid
jaunty
karmic
lucid
maverick
natty

Bon, j'avoue que tout ce qui est antérieur à Hardy n'a que peu d'intérêt, mais je m'efforce de couvrir tous les cas même les plus improbables big_smile

Le but étant, par la suite, de pouvoir choisir de ne copier que les dépôts concernant les distributions choisies, l'exemple du tuto représente 150 à 200Go, le but est de dire: je ne veux copier que les dépôts officiels pour Lucid par ex, et la on tombe autour de 30 40 Go.
La comparaison avec  list.distrib sert à évacuer les résultats de types "stable" ou "testing" qui peuvent être retourné par des lignes concernant des dépôts tiers non liés à une distrib Ubuntu.
Ces dépôts tiers sont qualifié de Généraux dans le script.

Ton code est dur à déboguer car tu ne donnes pas les fichiers sur lesquels tu travail, ni le format de sortie que tu veux obtenir. De plus ta comparaison à la fin se fait sur un fichier que tu es le seul à posséder et tes chemins sont en dur !

Tu as raison, je vais m'employer à la rédaction d'un tuto avec captures d'écran et fichiers téléchargeables, ce devrait être plus clair.
Je peux le faire maintenant car le script fonctionne à peu près.

Dernière modification par Tomzz (Le 27/09/2010, à 14:48)

Hors ligne

#10 Le 27/09/2010, à 14:48

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

gsub(/-.*|\.\//,"")

Substitue à '-.*' ou '|' à './' ..., rien ""
Les anti-slashs servent à empêcher l'interprétation des caractères.

print $3

Imprimer le champs 3 après les modifications précédente.


La réponse est 42

Hors ligne

#11 Le 27/09/2010, à 16:08

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bon, désolé si je suis lourd avec mes questions:
print $3 ok, le nom de la distrib, si il existe est toujours sur le champs 3.

Substitue à '-.*' ou '|' à './' ..., rien ""

Là j'ai un peu de mal, si j'ai bien compris, ça: '-.*', ça viens traiter le cas ou le champs 3 contient lucid-updates par exemple.
Je crois avoir compris: - on prend le caractère - le point dit "ce qui suit après" et * remplace n'importe quel(s) caractère(s).
Donc dans lucid-updates on prend le - et tout ce qui suit avant le prochain espace (ou délimiteur de champs) et on le remplace par rien.
J'ai bon ? big_smile

Sinon, pour awk '$1 ~ /deb/... ça prend bien les lignes dont le champs 1 contient deb aussi bien que celle contenant deb-amd64


Dernier point, est ce que grep -v '^#|^$|^ *$' et équivalant à grep "^[^#|^$|^ *$]"

Bon, j'en profite un peu, awk a toujours été un grand mystère pour moi alors j'essaie de progresser (la puissance du truc fait un peu peur je dois dire wink )
J'essaie de détailler  ce que j'ai compris ou cru comprendre pour permetre les réponses les plus courtes possibles.

Merci

Dernière modification par Tomzz (Le 27/09/2010, à 16:09)

Hors ligne

#12 Le 27/09/2010, à 17:57

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

ça viens traiter le cas ou le champs 3 contient lucid-updates par exemple.

Ça traite TOUS les champs de la ligne (mais ce n'est pas gênant).

Sinon, pour awk '$1 ~ /deb/... ça prend bien les lignes dont le champs 1 contient deb aussi bien que celle contenant deb-amd64

Oui. La substitution '-.*' se fait après.

Dernier point, est ce que grep -v '^#|^$|^ *$' et équivalant à grep "^[^#|^$|^ *$]"

Non (fait le test, tu verras). J'ai repiqué la formule sur le net et j'ai pas trop envie de me retaper les regexp.


La réponse est 42

Hors ligne

#13 Le 28/09/2010, à 16:46

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

[edit] j'ai un peu tout repris, et effectivement c'est maintenant plus simple (voir premier post).

Tout semble fonctionnel, même le premier script

Il doit surement y avoir moyen de remplacer certains empilements de sed par awk, je regarderai ça.
Je vais commencer à reprendre l'autre script, celui des mise à jour.

Bon, je crois que j'ai enfin trouvé un document simple pour comprendre un peu tous ces caractères ^.*...
Ici: http://fr.wikipedia.org/wiki/Expression_rationnelle

Je re potasse un peu mon script et je reviens.

Merci

Hors ligne

#14 Le 28/09/2010, à 22:11

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Je te propose de remplacer :

########## choix du disque source à copier ##########
cpt1=0
for sour in `ls /media/`; do
    lsou[$cpt1]="FALSE /media/$sour "
    ((cpt1++))
done

source=$(zenity --width=400 --height=800 --list --column "" --radiolist\
    --title="Disque source" \
    --text="Disque source des dépôts" \
    --column="" \
    ${lsou[@]})
source1="${source}/miroir/apt-mirror-config"

## Cas où le disque à copier n'est pas dans /media ou que apt-mirror-config n'est pas trouvé
if [ ! -e ${source1} ]; then
    {
        source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config")/home/tomzz/scripts/apt-mirror/list.distrib
        source=$(echo ${source1} | sed 's/\/miroir\/apt-m.*//g')
    }
fi

par la foncion suivante :

# Switchs internes
PATH_OK=0

FindDVD()
{
if [[ -r /proc/sys/dev/cdrom/info ]]
then
    local DRIVE_LIST=($(awk -F: '/drive name/ {gsub(/\t/, " "); gsub(/ +/, " "); print $2}' /proc/sys/dev/cdrom/info ))
    local CAN_READ_DVD=($(awk -F: '/Can read DVD/ {gsub(/\t/, " "); gsub(/ +/, " "); print $2}' /proc/sys/dev/cdrom/info ))
    local DRIVE_LIST_LEN=$[${#DRIVE_LIST[@]}-1]
    for (( i=0; i<=${DRIVE_LIST_LEN} ; i++ ))
    do
        [[ ${CAN_READ_DVD[$i]} -eq 1 ]] && DVD_DEV_LIST="${DVD_DEV_LIST} /dev/${DRIVE_LIST[$i]}"
    done
fi

if [[ "${DVD_DEV_LIST}x" = "x" ]]
then
    local DEV_DV=$(ls /dev/dvd? 2>/dev/null)
    local DEV_HD=$(ls /dev/hd? 2> /dev/null)
    local DEV_SR=$(ls /dev/sr? 2> /dev/null)
    local DEV_SC=$(ls /dev/scd? 2> /dev/null)
    for DEV in ${DEV_DV} ${DEV_HD} ${DEV_SR} ${DEV_SC}
    do
        local DEV_LNK=$(ls -ls ${DEV} | awk -F'->' '{print $2}')
        if [[ "${DEV_LNK}x" != "x" ]]
        then
            local DVD_DEV_LIST="${DVD_DEV_LIST} ${DEV_LNK}"
        else
            local DVD_DEV_LIST="${DVD_DEV_LIST} ${DEV}"
        fi
    done
fi
DVD_DEV_LIST=${DVD_DEV_LIST# }
DVD_DEV_LIST=$(echo "${DVD_DEV_LIST}" | tr ' ' '\n' | grep -F "/dev/" | sort | uniq | tr '\n' ' ')

for DEV in ${DVD_DEV_LIST}
do
    [[ -e "${DEV}/miroir/apt-mirror-config" ]] && source1="${DEV}/miroir/apt-mirror-config" && PATH_OK=1
done

if [[ "${PATH_OK}" -eq 0 ]]
then
    source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config") || exit
    echo ${source1} >  $HOME/scripts/apt-mirror/tmp/disque-source
    perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/tmp/disque-source > $HOME/scripts/apt-mirror/tmp/disque-source1
    source=$(cat $HOME/scripts/apt-mirror/tmp/disque-source1)
fi

}

FindDVD

Que fait cette fonction ?
- Détection automatique des lecteurs cd/dvd quelque soit leur point de montage (un peut comme la détection à l'insertion d'un cd).
- Recherche automatique du fichier 'apt-mirror-config' dans /le_lecteur/cd/miroir
- Si et seulement si ce fichier n'est pas trouvé, ouverture d'une boîte de dialogue.

echo ${source1} >  $HOME/scripts/apt-mirror/tmp/disque-source
    perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/tmp/disque-source > $HOME/scripts/apt-mirror/tmp/disque-source1
    source=$(cat $HOME/scripts/apt-mirror/tmp/disque-source1)

Tu veux faire quoi avec ça ?


La réponse est 42

Hors ligne

#15 Le 28/09/2010, à 22:44

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonsoir,

Pour la fonction je vais regarder en détail, mais oui, ça me parait vraiment meilleur comme ça.

Sinon, j'édite à chaque fois le premier post pour y mettre la dernière version des scripts donc la ligne dont tu parle je l'ai déjà remplacée:

echo ${source1} >  $HOME/scripts/apt-mirror/tmp/disque-source
    perl -0777ne 'print for /^(.*?)\/miroir\/apt-mirror-config/sg' $HOME/scripts/apt-mirror/tmp/disque-source > $HOME/scripts/apt-mirror/tmp/disque-source1
    source=$(cat $HOME/scripts/apt-mirror/tmp/disque-source1)

En fait, je séparais le chemin du apt-mirror-config pour en extraire uniquement le chemin du disque (j'ai tué une mouche avec une bombe atomique)

J'ai remplacé par ça:

source1=$(zenity --file-selection --title="Indiquez votre apt-mirror-config")/home/tomzz/scripts/apt-mirror/list.distrib
        source=$(echo ${source1} | sed 's/\/miroir\/apt-m.*//g')

Tiens, le seul endroit ou j'utilise encore perl, c'est ici:

## On compare le résultat obtenu avec la liste des realase d'Ubuntu (disponible dans $HOME/scripts/apt-mirror/list.distrib) pour ne garder que ce qui est commun aux deux fichiers
perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' $HOME/scripts/apt-mirror/tmp/dist-dispo1 /home/tomzz/scripts/apt-mirror/list.distrib > $HOME/scripts/apt-mirror/tmp/dist-dispo

Où, par exemple:
Le fichier list.distrib figé et fournis avec le script contient:

warty
hoary
breezy
dapper
edgy
feisty
gutsy
hardy
intrepid
jaunty
karmic
lucid
maverick
natty

Le fichier dist-dispo1 calculé à partir de apt-mirror-config contient:

stable
testing
karmic
lucid

Et le fichier dist-dispo, le résultat de la commande, contient uniquement les lignes communes aux 2 fichiers d'entrée:

karmic
lucid

J'avais essayé avec comm ou diff mais je n'avais jamais le résultat escompté, ceci dit il y avait plein de trucs qui n'allaient pas en amont, du coup il faudra que je re-teste.

J'ai utilisé les commandes perl parce que j'arrivais à bien prévoir le résultat (sans en maitriser la syntaxe je doit dire), grâce à toi, j'ai compris pas mal de trucs et je me sent plus allaise avec les grep sed et awk (mais il reste du boulot wink )

Merci

Hors ligne

#16 Le 28/09/2010, à 23:13

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

En fait, je séparais le chemin du apt-mirror-config pour en extraire uniquement le chemin du disque (j'ai tué une mouche avec une bombe atomique)

Yes, je confirme.
Solution full bash :

source="${source1%/*}"

Vire le 'list.distrib' et intégre-le au script ainsi :

for VALID_DISTRIB in warty hoary breezy dapper edgy feisty gutsy hardy intrepid jaunty karmic lucid maverick natty
do
    if [[ $(grep ${VALID_DISTRIB} $HOME/scripts/apt-mirror/tmp/dist-dispo1) ]]
    then
        echo ${VALID_DISTRIB} >> $HOME/scripts/apt-mirror/tmp/dist-dispo
   fi
done

La réponse est 42

Hors ligne

#17 Le 28/09/2010, à 23:39

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

source="${source1%/*}"

Alors, celui là, ça fait deux jours que je le cherche, en fait, pour avoir le résultat que je cherche c'est:

${source1%/miroir/apt-m*}

car la seule partie que je connaisse c'est /miroir/apt-mirror-config théoriquement la profondeur de l'arborescence est inconnue, et c'est justement tout ce qu'il y a au-dessus que je cherche.

Vire le 'list.distrib' et intégre-le au script ainsi :

Je préfère laisser ces données externes au script, par, potentiellement il pourrait être utilisé par des personnes n'y connaissant rien, du coup ce sera plus facile pour eux, en octobre 2011 de faire:

echo "ornithorynque oisif" >> list.distrib

Que d'éditer le script.

En revanche, je vais utiliser l'idée de la boucle for pour virer les derniers perl

Dernière modification par Tomzz (Le 28/09/2010, à 23:53)

Hors ligne

#18 Le 29/09/2010, à 00:28

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Tiens pendant que j'y penses, aucune de tes boîtes de dialogue n'a de sortie (sauf la mienne). C'est-à-dire que lorsque tu clique sur annule la boîte suivante s'ouvre quand même.
Je te conseil aussi de modifier DÈS maintenant tes liens en dur, sinon ton script ne sera pas portable.


La réponse est 42

Hors ligne

#19 Le 29/09/2010, à 01:08

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Tiens pendant que j'y penses, aucune de tes boîtes de dialogue n'a de sortie (sauf la mienne). C'est-à-dire que lorsque tu clique sur annule la boîte suivante s'ouvre quand même.

C'est le genre de trucs que je traitais à la fin, si je n'avais pas la flemme.
Pourquoi ?
Parce que je faisait comme ça par exemple:

zenity    --question \
            --timeout=10\
            --ok-label="Oui"\
            --cancel-label="Non"\
            --text="Etes-vous prêt à continuer ?"
            go=$?

    if [ "$go" = "1" ]; then
    {
      exit 0
    }
    fi

:
Sans commentaires roll

Je te conseil aussi de modifier DÈS maintenant tes liens en dur, sinon ton script ne sera pas portable.

Je suis un peu malalèse  avec les chemins relatifs, par exemple, la commande.

csplit -z -q $HOME/scripts/apt-mirror/tmp/apt-mirror-config "/end config/1"

me sort ses résultats dans le répertoire courant et je n'ai pas su trouver d'autre solution que de la faire précéder d'un cd $HOME/scripts/apt-mirror/tmp/ pour que je sois sûr de l'endroit où les fichiers vont sortir.
C'est parce que je ne maitrise pas ces paramètres que "j'impose" l'installation de ce script dans le répertoire $HOME/scripts/apt-mirror.
Je colle d'ailleurs tous mes scripts dans $HOME/scripts.

Ça aussi c'est un point qu'il va falloir que je creuse sérieusement.

Tiens, un peu HS mais ça peu peut-être aider quelqu'un qui passerai par là, j'ai perdu 2h cet aprem parce que j'essayais ce script entre 2 disques, un en ext3 l'autre en fat32 et ça ne marchait pas parce qu'Apache ne gère pas l'accès sur fat32.
En fait, après la config des virtualhosts, l'accès au dépôt sur fat32 me retournais une erreur 403.

Hors ligne

#20 Le 29/09/2010, à 11:51

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Tu écris :

## supprime les fichiers temporaires au cas ou il en resterai d'une précédante utilisation
rm -f $HOME/scripts/apt-mirror/tmp/*

## Sauvegarde du fichier hosts
cp /etc/hosts $HOME/scripts/apt-mirror/hosts.org

Je vais te montrer un truc drôle :

[twocats@LinuxBox ~]$ echo $HOME
/home/twocats
[twocats@LinuxBox ~]$ su
Mot de passe : 
[root@LinuxBox twocats]# echo $HOME
/root

Et oui, ton script s'exécute en root (rien que ça me donne des picotements hmm). Et le HOME de root c'est /root pas ton répertoire personnel.


La réponse est 42

Hors ligne

#21 Le 29/09/2010, à 12:20

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Et oui, ton script s'exécute en root (rien que ça me donne des picotements hmm). Et le HOME de root c'est /root pas ton répertoire personnel.

tomzz@tomzz-desktop:~$ sudo -s
[sudo] password for tomzz: 
root@tomzz-desktop:~# echo $HOME
/home/tomzz
root@tomzz-desktop:~#

Ce script est prévu pour être lancé après un sudo -s (je l'ai mis sur le tuto mais visiblement je l'ai oublié ici je vais corriger) qui donne les droits root en concevant les variables d'environnement.

Je fais ça à cause des modifs sur Apache, le but est que le terminal ne reste qu'un simple affichage et que l'utilisateur n'ai plus à intervenir dedans une fois le script lancé.

Je vais regarder les problèmes de portabilités auxquels tu fais allusion, simplement parce que c'est mieux.
Mais le but est d'intégrer ces scripts dans un live cd pour que la gestion de ces disques de dépôts puisse ce faire depuis n'importe quel PC quelque soit le système.
Du coup, le système ne sera pas "cassable"
C'est destiné à des gens n'ayant accès à internet que rarement et pas forcément avec leur PC.

Hors ligne

#22 Le 07/10/2010, à 14:33

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonjour,
J'ai encore du boulot là dessus, mais il va falloir que je lâche quelque temps.
J'ai ajouté pas mal de fonctions dans divers scripts.
voir ici: http://www.2aide.fr/Dokuwiki/doku.php?i … tu:gestion

Le dernier script n'a pas été testé correctement, mais le reste semble fonctionner.
Si quelqu'un veut tester, remonter des bugs ou améliorer le truc, ce n'est pas de refus.
Voir ici: http://www.2aide.fr/Dokuwiki/doku.php?i … tu:gestion

Hors ligne

#23 Le 07/10/2010, à 21:38

twocats

Re : Cloner sélectivement un disque de miroir des dépots.

Version simplifiée de 'lanceur.sh' :

#!/bin/bash
#

aa="0"
while [ "$aa" = "0" ] ## Bouclage infini pour relancer le script en cas d'erreur
do

    action=$(zenity --width=800 --height=400 --list --column "" --radiolist\
        --title="Opération" \
        --text="Quelle opération souhaitez-vous effectuer" \
        --column="" \
        --column="Opération" \
        TRUE 1 "Copier un disque de dépôts vers un disque vierge" \
        FALSE 2 "Mettre à jour un disque de dépôts depuis un autre disque ou depuis internet" \
        FALSE 3 "Créer un nouveau disque de dépôts ou ajouter des dépôts à un disque existant" \
        FALSE 4 "Copier tout ou partie d'un installation d'Okawix" \
        FALSE 5 "Prendre un cliché de votre disque de dépôts ou installer une archive des mises à jour" \
        FALSE 6 "Créer une archive des mises à jour") || exit

    case ${action} in
    1 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo 'Veuillez saisir votre mot de passe d\047administrateur') \033[0m\"
        eval $(echo 'sudo -s $HOME/scripts/apt-mirror/copie-des-depots.sh')"
        ;;
    2 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo 'Veuillez saisir votre mot de passe d\047administrateur') \033[0m\"
        eval $(echo 'sudo -s $HOME/scripts/apt-mirror/mise-a-jour-disque-depot.sh')"
        ;;
    3 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo 'Veuillez saisir votre mot de passe d\047administrateur') \033[0m\"
        eval $(echo 'sudo -s $HOME/scripts/apt-mirror/crea-ajout-depots.sh')"
        ;;
    4 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo '') \033[0m\"
        $HOME/scripts/apt-mirror/copie_okawix.sh"
        ;;
    5 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo '') \033[0m\"
        $HOME/scripts/apt-mirror/cliche.sh"
        ;;
    6 )
        xterm -title 'label' -e "\
        echo -e \"\E[37;44m\033[1m $(echo '') \033[0m\"
        $HOME/scripts/apt-mirror/crea-img-maj.sh"
        ;;
    esac

    zenity    --question --cancel-label="Terminé" --ok-label="Autre tâche" --title="L'opération est terminée" --text="Souhaitez-vous exécuter une autre tâche ?" || break
done

exit 0

La réponse est 42

Hors ligne

#24 Le 07/10/2010, à 22:12

Tomzz

Re : Cloner sélectivement un disque de miroir des dépots.

Bonsoir,
Et, maintenant j'ai des touches usées sur mon clavier, le M le E, le R, le C et le I wink.
Ta solution est adoptée et en ligne.
J'ai aussi fais quelques modifs, en particulier sur les deux derniers scripts:
Prendre un cliché de votre disque de dépôts ou installer une archive des mises à jour
Créer une archive des mises à jour

Ils semblent fonctionner maintenant (j'avais inversé qqs variables)

J'ai aussi déplacé la suppression des fichiers temporaires de tous les scripts après la confirmation de fin d'opération, ça permet de vérifier le contenu pour débuger, et ça ne change rien à l'utilisation.

Hors ligne

#25 Le 11/10/2010, à 00:52

Tomzz

Hors ligne

Haut de page ↑