Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#101 Le 10/12/2007, à 13:21

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Par contre je m'interroge sur quelques points. D'abord beaucoup de $2 sont encore dans le script, et je ne comprend pas toujours comment ils sont  gérés. Enfin je pense que tu sais ce que tu fais l'essentiel étant que ça marche. Ensuite j'ai installé torcs hier. C'est légèrment diférent de mes essais habituels, car torcs n'est pas un paquet isolé, il a 4 dépendances. et je suis au regret de dire que ./apt-off -x torcs m'a retourné une erreur => j'ai continué à  la main.  Ceci dit je n'ai pas utilisé la toute dernière version du script que tu viens de modifier, mais celle dont je t'avais dit qu'elle marchait wink.


Pour ce qui est des réactions de la liste de diffusion, elles sont tout à  fait positives, il n'y a pas de problème on dirait.

Hors ligne

#102 Le 11/12/2007, à 02:12

yurek

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

if [[ `ls ${LISTDIR} | grep binary-i386_Packages | wc -l` == 0 ]]

no no no pas d'accord , pour la version amd64 bit?

apt-get partout !! les versions aptitude, yul etc...

les dépendances de ce script
awk,less, wc...

        rm -f .offline_tmp
ahh un rm !! quel horreur, on pourrait remplacer tous les rm par des mv .ex: mv .offline_tmp .Trash ?? ca permettrait de faire un meilleur débuggage

                rm -rf ${PARTIAL}
depuis quand on fait un rm sur une variable (j'ai pas analysé le script en détail, je me casserai la tete le week end )?

#!/bin/bash

que ca?
en générale on met la version avec. et aussi dans le help.

#!/bin/bash
#version XXX by grand gourou


bref voici mes remarques.


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#103 Le 16/12/2007, à 14:28

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Aldian a écrit :

Par contre je m'interroge sur quelques points. D'abord beaucoup de $2 sont encore dans le script, et je ne comprend pas toujours comment ils sont  gérés. Enfin je pense que tu sais ce que tu fais l'essentiel étant que ça marche.

Bien vu, il s'agissait en fait d'un plantage de ma part, j'avais pas corrigé le bon script... Je viens de mettre à  jour le script du premier message.

Adian a écrit :

Ensuite j'ai installé torcs hier. C'est légèrment diférent de mes essais habituels, car torcs n'est pas un paquet isolé, il a 4 dépendances. et je suis au regret de dire que ./apt-off -x torcs m'a retourné une erreur => j'ai continué à  la main.

Curieux, il me semblait que ça devrait être géré correctement... Quelle était l'erreur exactement ?

Aldian a écrit :

Pour ce qui est des réactions de la liste de diffusion, elles sont tout à  fait positives, il n'y a pas de problème on dirait.

Oui, j'ai suivi tout ça de loin (n'étant pas dispo cette semaine). smile

Je ferai pas de commentaire sur ta page, n'ayant pas le temps de la lire pour l'instant, sinon qu'elle a l'air très complète.

Hors ligne

#104 Le 16/12/2007, à 14:41

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

yurek a écrit :

if [[ `ls ${LISTDIR} | grep binary-i386_Packages | wc -l` == 0 ]]

no no no pas d'accord , pour la version amd64 bit?

Oui, c'est une limitation dont je suis au courant et j'ai déjà  parlé dans le topic. Il serait effectivement bien de le préciser dans le wiki et dans le premier post, ce que je vais m'empresser de faire avant de l'oublier à  nouveau... Ce serait effectivement mieux que quelqu'un qui est sous version 64bits me donne l'intitulé de ses listes de paquets... wink

yurek a écrit :

apt-get partout !! les versions aptitude, yul etc...

Ubuntu est livrée avec apt-get par défaut, synaptic utilise apt-get, et il est conseillé de ne pas tout mélanger. Par conséquent, apt-get me semblait le meilleur choix.

yurek a écrit :

les dépendances de ce script awk,less, wc...

Pas faux, j'avais pas pensé à  ça. Ben espérons qu'elles sont dispo grà¢ce à  l'install de base... hmm

yurek a écrit :

rm -f .offline_tmp
ahh un rm !! quel horreur, on pourrait remplacer tous les rm par des mv .ex: mv .offline_tmp .Trash ?? ca permettrait de faire un meilleur débuggage

Perso je n'ai pas peur des rm, mais on pourrait.

yurek a écrit :

rm -rf ${PARTIAL}
depuis quand on fait un rm sur une variable (j'ai pas analysé le script en détail, je me casserai la tete le week end )?

Pour ma part, depuis toujours... smile

yurek a écrit :

#!/bin/bash
que ca?
en générale on met la version avec. et aussi dans le help.
#!/bin/bash
#version XXX by grand gourou

Oui, j'avais même mis un copyright/copyleft dans la version originale, mais je trouvais ça lourd pour un "petit" script comme ça... Quant au numéro de version, c'est vrai que ça aurait pu éviter des confusions, notamment avec moi-même... big_smile Mais j'ai franchement la flemme de changer de version pour deux mots corrigés...

yurek a écrit :

bref voici mes remarques.

Merci. Pour ma défense, je n'utilise plus Ubuntu, ni même une distribution basée sur apt, depuis bientà´t un an, en plus j'ai internet depuis encore plus longtemps, et donc tu comprendras que c'est pas évident dans ces conditions d'une part de se sentir très concerné, et d'autre part de coder dans le noir... wink

Hors ligne

#105 Le 16/12/2007, à 14:53

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Skippy le Grand Gourou a écrit :

Je ferai pas de commentaire sur ta page, n'ayant pas le temps de la lire pour l'instant, sinon qu'elle a l'air très complète.

Finalement j'ai lu la partie concernant apt-off, ça m'a l'air très bien. smile
Un seul petit détail : tu dis qu'"il télécharge même les clés de sécurité", or il me semblait que tu m'avais dit que ça n'était pas le cas ?

Skippy le Grand Gourou a écrit :
yurek a écrit :

no no no pas d'accord , pour la version amd64 bit?

Oui, c'est une limitation dont je suis au courant et j'ai déjà parlé dans le topic. Il serait effectivement bien de le préciser dans le wiki et dans le premier post, ce que je vais m'empresser de faire avant de l'oublier à nouveau... Ce serait effectivement mieux que quelqu'un qui est sous version 64bits me donne l'intitulé de ses listes de paquets... wink

Finalement je ne modifie pas le wiki, ça poussera les gens à venir poster ici si ça marche pas plutôt que de se dire "tant pis, ça marche pas". Enfin je me comprends. wink

Hors ligne

#106 Le 16/12/2007, à 16:08

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Skippy le Grand Gourou a écrit :

Un seul petit détail : tu dis qu'"il télécharge même les clés de sécurité", or il me semblait que tu m'avais dit que ça n'était pas le cas ?

Je n'ai jamais dit que ce n'était pas le cas. Simplement j'avais supposé que ça ne l'étais pas et agi en conséquence. Comme tu m'as dit qu'il devait le faire, je l'ai précisé dans le wiki, mais honnêtement, je n'ai pas vérifié.

pour ce qui est de l'utilisation du script sur des paquets possédant des dépendances et du bug au moment de l'extraction, je vais vérifier ça avec ton dernier script, je te tiendrais au courant.

Dernière modification par Aldian (Le 16/12/2007, à 16:09)

Hors ligne

#107 Le 03/01/2008, à 15:39

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Je suis actuellement très occupé, donc je pense que je continuerai ces tests dans quelques semaines.

En attendant j'ai reçu un message de bertrand0 qui disait ceci :

Bonjour,

Je viens de tomber sur un document qui pourrait compléter votre liste
de
"méthodes" de téléchargement. En gros, le document explique comment
utiliser un disque externe (ie clef usb), pour stocker les infos de
status, et les fichiers téléchargés. De cette façon le apt-get peut
être
exécuté directement sur le pc connecté à  internet, avec un fichier de
configuration personnalisé.
Il me semble que c'est la méthode la plus efficace et robuste que j'ai
pu lire jusqu'à  présent, car elle utilise directement apt-get sur les
deux machines. Par contre elle est inapplicable si la machine connectée
à  internet n'utilise pas un système de type debian, puisque le
programme
apt-get n'y sera pas présent.

Le document se trouve dans le paquet apt-doc, et la partie qui nous
intéresse est le chapitre 2, dans le fichier:
/usr/share/doc/apt-doc/offline.html/ch2.html

Après avoir parcouru rapidement la documentation concernée, il semblerait qu'il s'agisse d'une méthode fortement apparentée à  la tienne, c'est pourquoi je te le signale. Ca me semble intéressant car ça a l'air vraiment propre. D'un autre coté, ça va probablement paraà®tre obscur pour un néophyte (déjà  moi j'ai du mal, d'autant que je ne comprend pas tout l'anglais technique utilisé). De plus, je crains que tout ne soit pas dit, notamment dans le cas o๠les deux machines ont une config différentes. Et puis je ne suis pas sûr d'avoir vu que la mise à  jour des listes soit réalisable par cette méthode.

Hors ligne

#108 Le 03/01/2008, à 16:04

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Voici pour mémoire le contenu de ce paquet :

Using APT Offline

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Abstract

This document describes how to use APT in a non-networked environment, specifically a 'sneaker-net' approach for performing upgrades.
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Copyright Notice

Copyright © Jason Gunthorpe, 1999.

"APT" and this document are free software; you can redistribute them and/or modify them under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

For more details, on Debian GNU/Linux systems, see the file /usr/share/common-licenses/GPL for the full license.

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Contents

    * 1 Introduction
          o 1.1 Overview
    * 2 Using APT on both machines
          o 2.1 Overview
          o 2.2 The configuration file
    * 3 Using APT and wget
          o 3.1 Overview
          o 3.2 Operation

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Chapter 1 - Introduction

Normally APT requires direct access to a Debian archive, either from a local media or through a network. Another common complaint is that a Debian machine is on a slow link, such as a modem and another machine has a very fast connection but they are physically distant.

The solution to this is to use large removable media such as a Zip disc or a SuperDisk disc. These discs are not large enough to store the entire Debian archive but can easily fit a subset large enough for most users. The idea is to use APT to generate a list of packages that are required and then fetch them onto the disc using another machine with good connectivity. It is even possible to use another Debian machine with APT or to use a completely different OS and a download tool like wget.

This is achieved by creatively manipulating the APT configuration file. The essential premis to tell APT to look on a disc for it's archive files. Note that the disc should be formated with a filesystem that can handle long file names such as ext2, fat32 or vfat.

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Chapter 2 - Using APT on both machines

APT being available on both machines gives the simplest configuration. The basic idea is to place a copy of the status file on the disc and use the remote machine to fetch the latest package files and decide which packages to download. The disk directory structure should look like:

       /disc/
         archives/
            partial/
         lists/
            partial/
         status
         sources.list
         apt.conf

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.


2.2 The configuration file

The configuration file should tell APT to store its files on the disc and to use the configuration files on the disc as well. The sources.list should contain the proper sites that you wish to use from the remote machine, and the status file should be a copy of /var/lib/dpkg/status. Please note, if you are using a local archive you must use copy URIs, the syntax is identical to file URIs.

apt.conf must contain the necessary information to make APT use the disc:

      APT
      {
        /* This is not necessary if the two machines are the same arch, it tells
           the remote APT what architecture the Debian machine is */
        Architecture "i386";
       
        Get::Download-Only "true";
      };
     
      Dir
      {
        /* Use the disc for state information and redirect the status file from
           the /var/lib/dpkg default */
        State "/disc/";
        State::status "status";
     
        // Binary caches will be stored locally
        Cache::archives "/disc/archives/";
        Cache "/tmp/";
       
        // Location of the source list.
        Etc "/disc/";
      };

More details can be seen by examining the apt.conf man page and the sample configuration file in /usr/share/doc/apt/examples/apt.conf.

On the remote Debian machine the first thing to do is mount the disc and copy /var/lib/dpkg/status to it. You will also need to create the directories outlined in the Overview, archives/partial/ and lists/partial/ Then take the disc to the remote machine and configure the sources.list. On the remote machine execute the following:

      # export APT_CONFIG="/disc/apt.conf"
      # apt-get update
      [ APT fetches the package files ]
      # apt-get dist-upgrade
      [ APT fetches all the packages needed to upgrade your machine ]

The dist-upgrade command can be replaced with any-other standard APT commands, particularly dselect-upgrad. You can even use an APT front end such as dselect However this presents a problem in communicating your selections back to the local computer.

Now the disc contains all of the index files and archives needed to upgrade the Debian machine. Take the disc back and run:

       # export APT_CONFIG="/disc/apt.conf"
       # apt-get check
       [ APT generates a local copy of the cache files ]
       # apt-get --no-d -o dir::state::status=/var/lib/dpkg/status dist-upgrade
       [ Or any other APT command ]

It is necessary for proper function to re-specify the status file to be the local one. This is very important!

If you are using dselect you can do the very risky operation of copying disc/status to /var/lib/dpkg/status so that any selections you made on the remote machine are updated. I highly recommend that people only make selections on the local machine - but this may not always be possible. DO NOT copy the status file if dpkg or APT have been run in the mean time!!

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Chapter 3 - Using APT and wget

wget is a popular and portable download tool that can run on nearly any machine. Unlike the method above this requires that the Debian machine already has a list of available packages.

The basic idea is to create a disc that has only the archive files downloaded from the remote site. This is done by using the --print-uris option to apt-get and then preparing a wget script to actually fetch the packages.

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

3.2 Operation

Unlike the previous technique no special configuration files are required. We merely use the standard APT commands to generate the file list.

      # apt-get dist-upgrade
      [ Press no when prompted, make sure you are happy with the actions ]
      # apt-get -qq --print-uris dist-upgrade > uris
      # awk '{print "wget -O " $2 " " $1}' < uris > /disc/wget-script

Any command other than dist-upgrade could be used here, including dselect-upgrade.

The /disc/wget-script file will now contain a list of wget commands to execute in order to fetch the necessary archives. This script should be run with the current directory as the disc's mount point so as to save the output on the disc.

The remote machine would do something like

       # cd /disc
       # sh -x ./wget-script
       [ wait.. ]

Once the archives are downloaded and the disc returned to the Debian machine installation can proceed using,

       # apt-get -o dir::cache::archives="/disc/" dist-upgrade

Which will use the already fetched archives on the disc.

_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.

Using APT Offline
$Id: offline.sgml,v 1.8 2003/02/12 15:06:41 doogie Exp $

Jason Gunthorpe jgg@debian.org

Hors ligne

#109 Le 07/03/2008, à 12:55

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

dist-upgrade & intallation d'un paquet simple (et installation automatique de  ses dépendances) réalisés avec succès avec la dernière version du script (du 15 dec, ou par là, je crois ) smile

Dernière modification par Aldian (Le 07/03/2008, à 12:57)

Hors ligne

#110 Le 07/03/2008, à 13:00

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Nickel ! big_smile

Au fait, pour le document cité dans le message précédent, c'est celui dont je me suis inspiré (enfin le chapitre 3), cf le lien dans le premier post du topic... wink

Hors ligne

#111 Le 02/12/2008, à 20:57

nasdav

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Bonjour,
En vue de vous aider à améliorer votre méthode et de m'aider moi meme je vais vous citer quelque difficultés qu'on trouve nous les utilisateur de votre script c'est qu'il y'as beaucoup d'aller retour moi par exemple j'en ai fait
1 pour me rendre au poste de l'internet pour télécharger votre script sur pc
2 pour aller ché moi vider la liste /var/lib/apt/lists/*_package
3 pour faire un ./apt-off -g upgrade list pour qu'il me crée un truc vide pour les listes  sur pc
4 faire un ./apt-off -d
.... aller /Retour
si quelqu'un donne sa d'une manière explicite serait très utile en abréviant plus les aller retour si c'est possible

après je cherche à installer gcc je fait sur mon ordi
. /apt-off -g gcc
il m'affiche le fameux message de est ce que je veux écraser  offlines.packages ou seulement ajouter des lignes qui en résultent je met n
mais rien n'est ajouter !!!
comment pourai-je installer sa s'il vous plait ? ainsi que "man-pages"?
pour g++ à priori il va marcher ( je vous dirait sa demain) il as mit quelque chose dans offline.packages
cette requette n'est pas très urgente sauf que j'ai un tp de programmation systeme ou j'utilise g++ gcc gdb man et s'il y aura un éditeur de texte genre gedit ou xemacs je serait très content ce tp je vait le rendre Jeudi 04/11/2008 et je vait à la fac pour progresser dans ce tp jusqu'à minuit et c pas très convenable .
Merci d'avance pour skippy et à tout ce qui ont aidé au develloppement de script

#112 Le 02/12/2008, à 21:32

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

nasdav a écrit :

si quelqu'un donne sa d'une manière explicite serait très utile en abréviant plus les aller retour si c'est possible

Si c'est bien la question, je ne crois malheureusement pas qu'il soit possible de réduire le nombre d'aller-retours. hmm

nasdav a écrit :

après je cherche à installer gcc je fait sur mon ordi
. /apt-off -g gcc
il m'affiche le fameux message de est ce que je veux écraser  offlines.packages ou seulement ajouter des lignes qui en résultent je met n
mais rien n'est ajouter !!!
comment pourai-je installer sa s'il vous plait ?

Apparemment gcc est installé par défaut sur Ubuntu. Par contre tu auras besoin du paquet build-essential :

./apt-off -g build-essential
nasdav a écrit :

ainsi que "man-pages"?

Idem :

./apt-off -g man-pages

wink

Dernière modification par Skippy le Grand Gourou (Le 13/12/2008, à 22:17)

Hors ligne

#113 Le 13/12/2008, à 17:42

nasdav

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

./apt-off -g build-essentials

il m'affiche un message du genre

./E:impossible de trouver le paquet buils-essentials

sachant que E est ma clé USB
est que je souhaite installer netbeans et j'ai le fichier tar.zip qui contient tout les fichier de netbeans sur les pc de le FAC me suffit de dézziper ces fichier pour que je fait ./netbeans & et il se lance chez moi pas
Merci d'avance monsieur Skippy

#114 Le 13/12/2008, à 22:20

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Au temps pour moi, c'est pas build-essentials mais build-essential, sans 's'… roll J'ai corrigé mon post précédent, désolé.

Pour netbeans, je ne suis pas sûr d'avoir bien compris, mais tu as normalement juste à suivre la doc, en adaptant les appels à apt-get pour apt-off.

Hors ligne

#115 Le 15/12/2008, à 23:38

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

J'ajouterai que dans le cas de Netbeans, je préconise le mode d'installation alternatif. Je suis l'auteur de ce paragraphe, et je n'ai jamais eu de souci, ça a toujours marché nickel. En plus tu peux parfaitement télécharger les deux fichiers mentionnés depuis la fac sur une clé usb et les ramener pour procéder à l'installation en local, auquel cas tu n'auras même pas besoin d'utiliser apt-off.


En ce qui concerne buil-essential, j'ai déjà testé son installation avec apt-off, qui fut sans problème pour autant que je me rappelle smile.

Hors ligne

#116 Le 05/03/2009, à 12:35

LóQuercynol

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Bonjour, j'ai été amené à effectuer quelques modifications au script de Skippy Le Grand Gourou pour effectuer des mises à jour sur mes machines. Je poste le script modifié pour que tout le monde puisse en profiter.

Les modifications sont les suivantes :
- Adaptation aux architectures i386 et amd64,
- Possibilité de forcer l'installation en cas de problème de dépendances détecté sur la machine à mettre à jour (passage de l'argument -f à apt-get),
- Possibilité d'utiliser un fichier "sources.list" spécifique en modifiant la variable "SOURCE" en début de script (utilisation de la ressource "Dir::Etc::sourcelist" au niveau des appels à apt-get) : j'ai utilisé cette possibilité pour avoir un /etc/apt/sources.list pointant uniquement vers un média amovible, évitant ainsi l'émission de requêtes réseau récurrentes vouées à l'échec.

J'ai testé ce script sur une Hardy amd64 et une Gutsy i386 (kubuntu).

Voilà, je crois que c'est à peu près tout. Merci encore à Skippy Le Grand Gourou pour ce travail remarquable.

#!/bin/bash

FAILURE=1
SUCCESS=0
FIX_BROKEN=""

# Répertoires
CURRENTDIR="${PWD}/"
CONFIGDIR="config_files/"
DEB="deb/"
PARTIAL="${DEB}/partial/"
LISTDIR="/var/lib/apt/lists/"

# Fichiers
CONFIGFILE="config_apt"
OFFLINE="offline.packages"
SOURCE="/etc/apt/sources.list"

# Quelques couleurs
BOLD="\\033[1;39m"
NORMAL="\\033[0;39m"
VERT="\\033[32m"
ROUGE="\\033[31m"
ROSE="\\033[35m"
BLEU="\\033[34m"

OPTIONS="${BOLD}${BLEU}OPTIONS${NORMAL}\n
        \t${VERT}-d${NORMAL} ou${VERT} --download${NORMAL}\n
        \tTélécharge les paquets. Cette option doit être utilisée sur un\n
        \tordinateur disposant d'un système Linux et d'une connexion\n
        \tinternet. Une fois téléchargés, les paquets peuvent être\n
        \tplus ou moins volumineux, aussi prévoyez un support de\n
        \ttransport de capacité suffisante.${BOLD}${ROUGE} N'oubliez pas le fichier\n
        \t${BLEU}${OFFLINE}${NORMAL} !!!${NORMAL}\n\n
        \t${VERT}-f${NORMAL} ou${VERT} ----fix-broken${NORMAL}\n
        \tCorrection ; essaye de réparer un système dont les dépendances sont\n
        \tdéfectueuses. Cette option, utilisée avec install ou remove, peut\n
        \tomettre tout paquet de façon à permettre à APT de déduire une solution viable.\n
        \tChaque paquet spécifié doit complètement corriger le problème.\n
        \tCette option est quelquefois nécessaire lorsque l´on exécute APT pour\n
        \tla première fois ; APT lui-même interdit les dépendances défectueuses dans\n
        \tun système. Il est possible que la structure de dépendances d´un système\n
        \tsoit tellement corrompue qu´elle requiert une intervention manuelle\n
        \t(ce qui veut dire la plupart du temps utiliser ${BOLD}dselect(8)${NORMAL} ou ${BOLD}dpkg --remove${NORMAL}\n
        \tpour éliminer les paquets en cause).\n\n
        \t${VERT}-g${NORMAL} ou${VERT} --generate${BLEU} [paquet1 paquet2 ...]${NORMAL} ou${BLEU} [dist-upgrade]${NORMAL}\n
        \tGénère la liste des paquets à  télécharger. Cette liste est\n
        \tstockée dans le fichier ${BLEU}${OFFLINE}${NORMAL}.\n\n
        \t${VERT}-h${NORMAL} ou${VERT} --help${NORMAL}\n
        \tAffiche cette aide.\n\n
        \t${VERT}-o${NORMAL} ou${VERT} --options${NORMAL}\n
        \tAffiche les options.\n\n
        \t${VERT}-c${NORMAL} ou${VERT} --configure${NORMAL}\n
        \tTélécharge les fichiers de configuration d'apt.\n\n
        \t${VERT}-x${NORMAL} ou${VERT} --extract${BLEU} [paquet1 paquet2 ...]${NORMAL} ou${BLEU} [dist-upgrade]${NORMAL}\n
        \tExtrait et installe les paquets.\n"

########################################################
## Téléchargement des fichiers de configuration d'apt ##
########################################################
function configure()
{
        # On vérifie que la liste des listes de paquets est bien présente
        if [[ -e ${CONFIGDIR}/${CONFIGFILE} ]]
        then
                cd ${CONFIGDIR}
                sh -x ${CONFIGFILE} || cd ${CURRENTDIR} && return ${FAILURE}
                cd ${CURRENTDIR}
                echo -e "La procédure s'est déroulée correctement. Vous pouvez retourner sur votre ordinateur personnel et choisir des paquets à  installer."
                return ${SUCCESS}
        else
                echo -e "Vous n'avez pas exécuté${VERT} apt-off -g${NORMAL} sur votre ordinateur, ou vous avez supprimé le dossier${VERT} config_files${NORMAL} et le fichier${VERT} config_apt${NORMAL} qu'il contenait... Reprenez la procédure à  zéro."
                return ${FAILURE}
        fi
        return ${FAILURE}
}


################################
## Téléchargement des paquets ##
################################
function download()
{
        if [[ ! -e ${DEB} ]]
        then
                mkdir ${DEB}
        fi
        sh -x ${OFFLINE}
        return ${SUCCESS}
}


############################
## Extraction des paquets ##
############################
function extract()
{
        # Je vois plus trop l'intérêt de ça, mais bon...
        if [[ ! -e ${PARTIAL} ]]
        then
                PARTIAL_CREATED=1
                mkdir ${PARTIAL}
        else
                PARTIAL_CREATED=0
        fi

        # Test des arguments
        if [[ "$#" < 1 ]]
        then
                echo "ATTENTION : Vous devez indiquer le nom des programmes que vous voulez installer,"
                echo "ou le mot \"dist-upgrade\" !!!"
                exit
        # Cas particulier : mise à  jour
        elif  [[ $1 == "dist-upgrade" ]]
        then
                sudo apt-get -o dir::cache::archives=${PWD}/${DEB} -o Dir::Etc::sourcelist=${SOURCE} ${FIX_BROKEN} dist-upgrade
        else
                # Liste des paquets à  installer
                for ((i=1; i<="$#"; i++ ))
                do 
                        sudo apt-get -o dir::cache::archives=${PWD}/${DEB} -o Dir::Etc::sourcelist=${SOURCE} ${FIX_BROKEN} install ${!i}
                done
        fi

        # Un peu de ménage
        if (( ${PARTIAL_CREATED} )); then
                rm -rf ${PARTIAL}
        fi

        return ${SUCCESS}
}


##########################################
## Sélection des paquets à  télécharger  ##    
##########################################
function generate()
{
	case `uname -m` in
		amd64 | x86_64)
			DEB_ARCH=amd64 ;;
		i386 | i586 | i686 | *)
			DEB_ARCH=i386 ;;
	esac
	
        # Il faut au moins une liste de paquets
        if [[ `ls ${LISTDIR} | grep binary-${DEB_ARCH}_Packages | wc -l` == 0 ]]
        then
                # Si toute première utilisation, on prépare la configuration
                if [[ ! -e ${CONFIGDIR} ]]
                then
                        mkdir ${CONFIGDIR}
			echo "DEB_ARCH=${DEB_ARCH}" > ${CONFIGDIR}/${CONFIGFILE}
                        # Déduction des listes de paquets à  télécharger, d'après le sources.list
                        awk '($1=="deb" || $1=="deb-src") && !match($2,"cdrom") { split($2,A,"/"); for(i=4;i<=NF;++i) print "wget -O "A[3]"_"A[4]"_dists_"$3"_"$i"_binary-${DEB_ARCH}_Packages.gz "$2"dists/"$3"/"$i"/binary-${DEB_ARCH}/Packages.gz" }' < ${SOURCE} >> ${CONFIGDIR}/${CONFIGFILE}
                        # Un message de prévention...
                        echo -e "ATTENTION : Il semblerait que c'est la première fois que vous essayez d'utiliser un dérivé d'apt-get sur cet ordinateur. Afin de terminer la configuration, veuillez exécuter la commande${VERT} apt-off -c${NORMAL} sur un ordinateur disposant d'un accès à  internet, puis poursuivre la procédure."
                        exit
                # Si seconde utilisation, on installe les listes de paquets
                elif [[ `ls ${CONFIGDIR} | grep gz | wc -l` > 0 ]]
                then
                        sudo cp ${CONFIGDIR}/*.gz ${LISTDIR}
                        sudo chmod 755 ${LISTDIR}*.gz
                        # Plus compliqué qu'un "gunzip *.gz", mais permet d'éviter que le script quitte en cas de fichier vide
                        for FICHIER in `ls ${LISTDIR}*.gz`
                        do
                                sudo gunzip ${FICHIER}
                        done
                # Si l'utilisateur n'a pas bien compris...
                else
                        echo -e "Vous devez d'abord exécuter${VERT} apt-off -c${NORMAL} sur un ordinateur avec internet !"
                        exit
                fi
        fi

        # à‰craser ou mettre à  jour le fichier de paquets à  installer ?
        if [[ -e ${OFFLINE} ]]
        then
                echo "ATTENTION : Le fichier offline.packages existe déjà , voulez-vous l'écraser (si"
                echo "non, les paquets seront ajoutés à  la liste) ? (o/n)"
                read ECRASE
        fi

        # à‰craser ou mettre à  jour, suite...
        if [[ $ECRASE == o ]]
        then
                echo "cd ${DEB}" > ${OFFLINE}
        else
                echo "cd ${DEB}" >> ${OFFLINE}
        fi

        # Pas assez d'arguments !
        if [[ "$#" < 1 ]]
        then
                echo "ATTENTION : Vous devez indiquer le nom des programmes que vous voulez installer,"
                echo "ou le mot \"dist-upgrade\" !!!"
                exit
        # Cas particulier : mise à  jour
        elif [[ $1 == "dist-upgrade" ]]
        then
                sudo apt-get -o Dir::Etc::sourcelist=${SOURCE} ${FIX_BROKEN} -qq --print-uris dist-upgrade > .offline_tmp
		# Ajout de l'option -f pour éviter un abandon en cas de problème de dépendances
        else
                # Liste des paquets à  installer
                for ((i=1; i<="$#"; i++ ))
                do 
                        sudo apt-get -o Dir::Etc::sourcelist=${SOURCE} ${FIX_BROKEN} -qq --print-uris install ${!i} >> .offline_tmp
                done
        fi

        # Préparation du fichier de paquets à  installer
        awk '{print "wget -O " $2 " " $1}' < .offline_tmp >> ${OFFLINE}
        echo "cd .." >> ${OFFLINE}

#### Lignes à  décommenter pour Windows :
#       awk '{print $1}' < .offline_tmp >> offline.packages_url
#       awk '{print $2}' < .offline_tmp >> offline.packages_list

        rm -f .offline_tmp
}

# Un peu d'aide...
function printhelp()
{
        ESSAI="\\033[2J\\033[0;0f${BOLD}${BLEU}NOM${NORMAL}\n
        \tapt-off\n
        \n${BOLD}${BLEU}SYNOPSIS${NORMAL}\n
        \t${VERT}apt-off [option]${NORMAL}\n
        \n${BOLD}${BLEU}DESCRIPTION${NORMAL}\n
        \t${VERT}apt-off${NORMAL} est un script destiné à  permettre l'utilisation de\n
        \tl'utilitaire apt sur un ordinateur ne possédant pas de connexion à \n
        \tinternet. Il procède en trois étapes, devant être effectuées dans\n
        \tle répertoire contenant le fichier exécutable apt-off :\n
        \t1- sélection des paquets à  installer,\n
        \t2- téléchargement des paquets ; cette étape doit être effectuée sur\n
        \tun ordinateur disposant d'un système Linux (elle${BOLD} ne nécessite pas${NORMAL} apt,\n
        \tmais utilise${VERT} wget${NORMAL} ; si vous n'avez accès qu'à  un système Windows, vous\n
        \tdevrez décommenter une des deux lignes dédiées à  la fin du fichier\n
        \tapt-off et télécharger manuellement les paquets listés dans le fichier\n
        \t${VERT}offline.packages_url${NORMAL} ou${VERT} offline.packages_list${NORMAL}) et connecté à  internet,\n
        \t3- installation des paquets.\n
        \n${BOLD}${BLEU}AVERTISSEMENT${NORMAL}\n
        \t${BOLD}${ROUGE}ATTENTION :${NORMAL} l'installation de paquets et a fortiori la mise à  jour avec\n
        \tl'option dist-upgrade ne sont pas sans risques. Il est donc fortement\n
        \tconseillé, avant toute utilisation de ce programme, de simuler ces\n
        \topérations avec apt-get afin d'être certain de vouloir effectuer les\n
        \tmodifications (lancez simplement${VERT} apt-get install liste_de_paquets${NORMAL}\n
        \tou${VERT} apt-get dist-upgrade${NORMAL}). L'auteur ne saura être tenu pour responsable\n
        \ten cas de problème.\n"

        ESSAI="${ESSAI}\n${OPTIONS}\n${BOLD}${BLEU}COPYRIGHT${NORMAL}\n
        \tCopyright 2006, Goulven Guillard.\n
        \tCe programme est copyleft, la copie, la modification et la diffusion\n
        \tsont autorisées et encouragées tant qu'elles ne sont pas à  but lucratif.\n
        \tReportez les bugs à  ${BLEU}lecotegougdelaforce [at] free.fr${NORMAL}.\n"

        echo -e $ESSAI | less -R

        return ${SUCCESS}
}

# Liste des options disponibles
function usage()
{
        echo -e ${OPTIONS}
        return ${SUCCESS}
}


# Lisons les options
while getopts "cdg:hox:-:" OPTION
do
        case $OPTION in
                c )
                        if [[ $#>1 ]]
                        then
                                echo "Trop d'arguments !!!"
                                usage
                        else
                                configure
                        fi;;
                d )
                        if [[ $#>1 ]]
                        then
                                echo "Trop d'arguments !!!"
                                usage
                        else
                                download
                        fi;;
                f ) FIX_BROKEN="--fix-broken";;
                g )
                        while [[ $#>1 ]]
                        do
                                shift
                                PKG="${PKG} ${1}"
                        done
                        generate ${PKG};;
                h ) printhelp;;
                o ) usage;;
                x )
                        while [[ $#>1 ]]
                        do
                                shift
                                PKG="${PKG} ${1}"
                        done
                        extract ${PKG};;
                # Cas particulier : les options longues
                - )
                        case $OPTARG in
                                configure )
                                        if [[ $#>1 ]]
                                        then
                                                echo "Trop d'arguments !!!"
                                                usage
                                        else
                                                configure
                                        fi;;
                                download )
                                        if [[ $#>1 ]]
                                        then
                                                echo "Trop d'arguments !!!"
                                                usage
                                        else
                                                download
                                        fi;;
                                extract )
                                        while [[ $#>1 ]]
                                        do
                                                shift
                                                PKG="${PKG} ${1}"
                                        done
                                        extract ${PKG};;
                                fix-broken )    FIX_BROKEN="--fix-broken";;
                                generate )
                                        while [[ $#>1 ]]
                                        do
                                                shift
                                                PKG="${PKG} ${1}"
                                        done
                                        generate ${PKG};;
                                help )          printhelp;;
                                options )       usage;;
                                * )
                        esac;;
                # par défaut
                * ) usage;;
        esac
done

Hors ligne

#117 Le 05/03/2009, à 12:41

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Nickel, merci ! big_smile

Ça tombe très bien, il se trouve qu'on est en train de monter un projet sur le launchpad pour que les scripts puissent être modifiés et testés plus simplement, je posterai ici quand ce sera prêt. wink

Hors ligne

#118 Le 20/03/2009, à 22:55

LóQuercynol

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Il doit y avoir encore une petite erreur dans la fonction generate : j'ai des soucis de téléchargement des fichiers _Packages car il manque un "/" dans l'url appelée par les wget. Du coup je me retape généralement ces téléchargements à la main. À l'occasion j'essaierai d'analyser un peu plus ce qui cloche (probablement ajout d'un "/" entre « "$2" » et « dists »).

Hors ligne

#119 Le 20/03/2009, à 23:11

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Ah, j'ai bien fait de ne pas le mettre en stable tout de suite alors… tongue

(Explication de la remarque précédente smile

On (enfin pour l'instant je ne participe pas beaucoup, sauf pour critiquer, mais bon…) monte actuellement un projet de dépôt de scripts principalement dédiés à Ubuntu.

J'aimerais qu'avant de passer en stable, les scripts soient testés par un tiers (autre que l'auteur, donc). Ma version a déjà été testée avec succès, donc je l'ai passée en stable. Par contre, tu es le seul à avoir testé la tienne (j'ai pas d'ubuntu sous la main), donc je la gardais en dev pour le moment… Au passage, le_biloute a effectué également quelques petites améliorations (directement sur la version stable, pas bien, mais bon, ça n'a pas l'air méchant).

Et là où l'on prend toute la mesure des bienfaits du projet, c'est que si tu n'as pas le temps de chercher ce qui cloche, tu peux commencer par simplement remplir un rapport de bug, et avec un peu de chances quelqu'un se chargera de corriger le problème avant que tu t'y mettes ! (Bon, faut pas rêver, pour l'instant c'est le tout début, mais bon…)

Je t'invite donc à le faire. wink

Dernière modification par Skippy le Grand Gourou (Le 20/03/2009, à 23:11)

Hors ligne

#120 Le 11/04/2009, à 19:40

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Je voudrais signaler que quelqu'un a rajouté une méthode dans la page de la doc sans se signaler sur la liste de diffusion (ou alors je l'ai loupé). Cette méthode contenait pas mal d'imprécisions que j'ai corrigées du mieux possible et me parait hautement dangereuse.
Qu'en pensez vous?
http://doc.ubuntu-fr.org/tutoriel/comment_ajouter_des_paquets_sans_internet?do=show#utiliser_une_ligne_de_commande_apt_pour_telecharger_paquet_dependances_sur_votre_cle_usb

Hors ligne

#121 Le 28/12/2009, à 01:06

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

plop. juste pour signaler que le script a été testé avec succès sous Jaunty et Karmic smile.

Hors ligne

#122 Le 28/12/2009, à 13:03

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Cool, merci pour le retour. smile

Hors ligne

#123 Le 08/04/2010, à 11:57

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Plop qq news

D'abord le script a été testé avec succès sur Ubuntu Netbook Remix 9.10.

Ensuite, il semblerait que sur le launchpad de ubuntu-fr Script (le projet lancé il y a un an et qui semble abandonné), quelqu'un ait dans les premiers temps relu le script et apporté quelques modifications mineures, qu'en as-tu pensé?

Par ailleurs, j'ai l'intention dans un futur de quelques mois de faire une révision globale de la page http://doc.ubuntu-fr.org/tutoriel/comment_ajouter_des_paquets_sans_internet J'envisage par exemple de refaire un test exhaustif des méthodes présentées et d'intégrer les nouvelles méthodes qui ont vu le jour depuis déjà deux ans.

Enfin j'envisage de modifier moi même le script, maintenant que je commence à avoir l'expérience nécessaire, avec les directions suivantes:

1) apt-off -x devrait connaitre tout seul les noms des paquets à extraire, vu qu'on les lui a déjà passés via apt-off -g => Si il est exécuté sans arguments, ajout d'une question de type "les paquets toto, titi, et tata vont être installés comfirmez vous? o/n".

2) dans le cas où on veut mettre à jour les listes de paquets grâce à apt-off, c'est ennuyeux de devoir aller manuellement vider le contenu du répertoire sur lequel apt-off teste => ajout de l'option -u ou -update-lists qui force la préparation de l'appel de l'option configure.

3) Chaque fois que l'on peut exécuter le script sur une machine reliée à internet, il serait logique d'en profiter pour mettre à jour les listes, même si on aura toujours un train de retard, c'est toujours mieux que la procédure actuelle. => ajout d'une option sous forme de question, ou de variable du script permettant si elle est activée que:
a) -g implique forcément -u
b) -d implique forcément -c
c) -x implique l'extraction des listes téléchargées.

4) Enfin j'envisage d'étudier sérieusement le cas où le seul ordinateur équipé d'internet disponible tourne sous Windows ou Mac, de tester les applis existantes qui pourraient servir au téléchargement des paquets, et si rien ne convient, d'écrire un petit programme java qui a partir du fichier offline_packages serait capable de télécharger tous les paquets quelque soit l'OS. Dans cette dernière éventualité il pourra être intéressant de modifier la manière dont le script gère offline_packages de manière qu'il ne contienne que les urls, et non plus les wget


Voila voila pour toutes mes idées que j'ai l'intention de mettre en pratique un jour... smile

Hors ligne

#124 Le 08/04/2010, à 18:41

Skippy le Grand Gourou

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Aldian a écrit :

D'abord le script a été testé avec succès sur Ubuntu Netbook Remix 9.10.

Cool. smile

Aldian a écrit :

Ensuite, il semblerait que sur le launchpad de ubuntu-fr Script (le projet lancé il y a un an et qui semble abandonné),

Le projet est actuellement au point mort, effectivement, mais il n'attend que d'être relancé. Personnellement je n'ai pas le temps d'y contribuer en ce moment, et quand j'aurai du temps j'ai d'autres projets qui me tiennent plus à cœur, je voulais juste participer au lancement. Malheureusement l'impulsion n'a pas été suffisamment forte, d'autant qu'il y a eu quelques tensions au début… Mais si tu reprends le script, je te conseille fortement de le faire via la plate-forme ubuntu-fr-scripts : ça ne présente que des avantages au niveau du suivi, et ça fait un peu plus sérieux qu'un script chopé au détour d'un forum… wink (Sans compter l'aspect pédagogique et expérience du développement avec bzr.)

Aldian a écrit :

[…] quelqu'un ait dans les premiers temps relu le script et apporté quelques modifications mineures, qu'en as-tu pensé?

Que du bien. wink

Aldian a écrit :

Par ailleurs, […]

Ça me semble très bien tout ça, n'hésite pas !

Hors ligne

#125 Le 10/04/2010, à 21:43

Aldian

Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)

Si jamais tu es dans le coin, j'aurais une petite question: quel est l'interpréteur shell appelé par défaut par apt-off?

Je pensais que sh apt-off et ./apt-off étaient équivalent, mais en fait non, car le premier bute sur les fonctions et retourne un truc dans le style Syntax error: "(" unexpected, tandis que le second ne pose pas de problème.

Hors ligne