пятница, 17 октября 2008 г.

Скачивание образов дисков Debian с использованием jigdo-lite

Кратко о сути jigdo. jigdo состоит из двух взаимно дополняющих друг друга утилит - jigdo-file и jigdo-lite.

Первая утилита, jigdo-file сканирует образ диска и находит там файлы. Для каждого файла утилита рассчитывает хэш md5 - контрольную сумму. В результате сканирования образа утилита создаёт два файла - шаблон диска (*.template), содержащий всю информацию из образа за исключением файлов, и сжатый список файлов с контрольными суммами (*.jigdo).

Вторая утилита, jigdo-lite на основании файлов *.jigdo и *.template может воссоздать образ диска. Недостающие файлы она может найти в произвольном указанном ей каталоге на локальном диске или скачать с указанного ей Интернет-зеркала Debian.

Таким образом jigdo - это умный вариант rsync или torrent, предназначенный для скачивания iso-образов, который умеет собирать часть образа диска из имеющихся уже скачанных файлов.

Установим пакет jigdo:
# aptitude install jigdo-file
Создаём текстовый файл jigdo-list.txt, содержащий в каждой строке по одной ссылке на файлы *.jigdo и *.template для скачивания, ссылки берём на странице http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/:
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-1.jigdo
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-1.template
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-2.jigdo
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-2.template
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-3.jigdo
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-40r4a-i386-DVD-3.template
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-update-4.0r4a-i386-DVD-1.jigdo
http://cdimage.debian.org/debian-cd/4.0_r4a/i386/jigdo-dvd/debian-update-4.0r4a-i386-DVD-1.template
Запускаем скачивание файлов из списка:
$ wget -i jigdo-list.txt
В файле /etc/fstab прописываем монтирование имеющихся образов:
/home/iso/debian-40r4-i386-DVD-1.iso /mnt/debian1 udf,iso9660 user,loop=/dev/loop0 0 0
/home/iso/debian-40r4-i386-DVD-2.iso /mnt/debian2 udf,iso9660 user,loop=/dev/loop1 0 0
/home/iso/debian-40r3-i386-DVD-3.iso /mnt/debian3 udf,iso9660 user,loop=/dev/loop2 0 0
/home/iso/debian-update-40r3-i386-DVD-1.iso /mnt/debian4 udf,iso9660 user,loop=/dev/loop3 0 0
Смонтируем все ISO-образы:
# mount -a
Запустим jidgo-lite для первого образа, в диалоге укажем путь до первого смонтрованного диска:
$ jigdo-lite jigdo/debian-40r4a-i386-DVD-1.jigdo
Программа выдаст запрос, где можно поискать уже скачанные файлы, укажем ей смонтированный диск:
Files to scan: /mnt/debian1/
После сканирования файлов в каталоге, подсчёта и сопоставления контрольных сумм, программа определит количество найденных файлов:
Found 4627 of the 4627 files required by the template
После чего создаст образ диска и выдаст соответствующее сообщение:
Successfully created `debian-40r4a-i386-DVD-1.iso'
Затем программа проверит контрольную сумму полученного образа, чтобы убедиться что полученный диск абсолютно идентичен находящемуся на официальном сайте debian:
OK: Checksums match, image is good!
Отлично, первый диск готов!

Переходим ко второму:
$ jigdo-lite jigdo/debian-40r4a-i386-DVD-2.jigdo
И этот диск тоже не пришлось качать, я в восторге!
Следующие два образа у меня более старые, поэтому кое-что всё-таки пришлось качать.
$ jigdo-lite jigdo/debian-40r4a-i386-DVD-3.jigdo
Программа запоминает использованные источники файлов и предлагает указать один из них их цифрой, можно ввести новый источник файлов.
1: /mnt/debian2/
2: /mnt/debian1/
Files to scan: /mnt/debian3/
На этот раз программа нашла лишь часть файлов:
Found 5121 of the 8309 files required by the template

Copied input files to temporary file `debian-40r4a-i386-DVD-3.iso.tmp' - repeat command and supply more files to continue
Пока программа не нашла все подходящие файлы, она будет выводить предложение указать дополнительные источники снова и снова, если у Вас больше нет источников, можно нажать Enter:
Files to scan:
После этого программа предложит указать зеркало в сети, с которого можно скачать недостающие пакеты. У меня установлен apt-cacher, который указан в файле /etc/apt/sources.list. Программа сама предлагает мне использовать его, я соглашаюсь нажатием Enter:
Debian mirror [http://127.0.0.1:3142/debian/]:
После чего программа начнёт скачивание недостающих пакетов из сети. Для скачивания используется программа wget. Если Вы хотите скачивать недостающие файлы через прокси-сервер, можно настроить переменные окружения или конфигурацию wget, в которой указать адрес, порт имя и пароль используемого прокси-сервера.

Я таким образом закачал себе все три основных диска и диск с обновлениями. Насколько я понял, диск с обновлениями содержит только те пакеты, которые изменились с прошлого выпуска, потому что этот диск мне не пришлось скачивать - достаточно было указать три основных уже скачанных смонтированных диска. Имея этот диск можно обновить систему с предыдущего выпуска до текущего.

Итак, краткое описание использования программы.
1. Нужно установить в системе пакет jigdo-file.
2. Скачать файлы *.jigdo и *.template с официального сайта Debian.
3. Приготовить файлы с дисков Debian предыдущих версий, каталоги с deb-пакетами. Они могут пригодиться для того, чтобы не пришлось скачивать все диски целиком.
4. Запускать команду jigdo-lite для каждого jigdo-файла.
4а. На запрос программы "Files to scan:" можно ответить вводом пути до источника файлов, можно ввести цифру из меню для уже указанного однажды каталога, можно нажать Enter, если источников больше нет.
4б. На запрос "Debian mirror [http://127.0.0.1:3142/debian/]:" ввести URL зеркала или просто нажать Enter, чтобы использовать предложенное зеркало.
5. После завершения всех пунктов наслаждаться готовыми свежими образами системы.
Для скачивания через прокси можно соответствующим образом настроить wget, чтобы для скачивания не нужно было держать постоянно открытым отдельный терминал, можно воспользоваться программой screen.

Комментариев нет: