#101 Le 10/12/2007, à 12: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 .
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, à 01: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, à 13:28
- Skippy le Grand Gourou
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.
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.
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 ?
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).
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, à 13:41
- Skippy le Grand Gourou
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?
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...
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.
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...
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.
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...
#!/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... Mais j'ai franchement la flemme de changer de version pour deux mots corrigés...
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...
Hors ligne
#105 Le 16/12/2007, à 13:53
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
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.
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 ?
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...
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.
Hors ligne
#106 Le 16/12/2007, à 15:08
- Aldian
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
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, à 15:09)
Hors ligne
#107 Le 03/01/2008, à 14: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, à 15: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, à 11: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 )
Dernière modification par Aldian (Le 07/03/2008, à 11:57)
Hors ligne
#110 Le 07/03/2008, à 12:00
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
Nickel !
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...
Hors ligne
#111 Le 02/12/2008, à 19: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, à 20:32
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
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.
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
ainsi que "man-pages"?
Idem :
./apt-off -g man-pages
Dernière modification par Skippy le Grand Gourou (Le 13/12/2008, à 21:17)
Hors ligne
#113 Le 13/12/2008, à 16: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, à 21: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'… 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, à 22: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 .
Hors ligne
#116 Le 05/03/2009, à 11: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, à 11:41
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
Nickel, merci !
Ç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.
Hors ligne
#118 Le 20/03/2009, à 21: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, à 22: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…
(Explication de la remarque précédente
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.
Dernière modification par Skippy le Grand Gourou (Le 20/03/2009, à 22:11)
Hors ligne
#120 Le 11/04/2009, à 18: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, à 00: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 .
Hors ligne
#122 Le 28/12/2009, à 12:03
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
Cool, merci pour le retour.
Hors ligne
#123 Le 08/04/2010, à 10: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...
Hors ligne
#124 Le 08/04/2010, à 17:41
- Skippy le Grand Gourou
Re : Apt-off, ou apt-get sans connexion internet (ou trop lente)
D'abord le script a été testé avec succès sur Ubuntu Netbook Remix 9.10.
Cool.
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… (Sans compter l'aspect pédagogique et expérience du développement avec bzr.)
[…] quelqu'un ait dans les premiers temps relu le script et apporté quelques modifications mineures, qu'en as-tu pensé?
Que du bien.
Par ailleurs, […]
Ça me semble très bien tout ça, n'hésite pas !
Hors ligne
#125 Le 10/04/2010, à 20: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