The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Создание CD или DVD образов из репозиториев Debian (debian dvd repostory packet deb dpkg apt)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: debian, dvd, repostory, packet, deb, dpkg, apt,  (найти похожие документы)
From: Михаил Конник <http://mydebianblog.blogspot.com>; Date: Sun, 16 Feb 2008 17:02:14 +0000 (UTC) Subject: Создание CD или DVD образов из репозиториев Debian Оригинал: http://mydebianblog.blogspot.com/2007/07/cd-dvd.html Задача: где-то далеко, за высокими горами, лежат репозитории пакетов, которые хочется использовать локально и записать на диски. Решение: для этого потребуется установить несколько пакетов, достать скрипт на ruby и освободить побольше места на винчестере. 1. Введение Пакеты по лицензионным или прочим соображениям делятся в репозитории на секции: например, главная (main) и несвободная (non-free). Пакеты несвободной секции в официальный репозиторий не входят по лицензионным соображениям - но это не значит, что их нельзя скачать. Простое скачивание результата не даст - нужно разбить большой репозиторий на DVD-образы, чтобы пользоваться ими потом. Для решения задачи нам потребуется несколько программ, которые в официальный свободный репозиторий гарантированно входят. 2. Создание локального зеркала Нужно установить пакет debmirror: aptitude install debmirror После этого можно будет качать репозиторий к себе на винчестер с возможностью автоматической докачки (если не сможете вытянуть его за один заход). Выходим в консольку и даём команду: debmirror debian --nosource --host=backports.org --root=debian --method=http --progress --dist=etch-backports --section=main,contrib,non-free --arch=i386 --ignore-release-gpg Теперь что всё это значит и как всем этим пользоваться. Полужирное выделение - это важные параметры, которые нужно будет менять, красным - это, собственно, значения параметров, которые меняем. Для пояснения ситуации лучше запустить броузер и скормить ему ссылку, которая стоит в --host, после чего станет ясно: * --host - это адрес репозитория (без слеша на конце, здесь это backports.org) * --root - это тот каталог, от которого начнётся зеркалирование пакетов. Короче - это каталог, который виден сразу после захода на адрес, указанный в --host и его же указываем сразу после команды debmirror. * --method - обычно это http * --dist - название версии дистрибутива, который нас интересует (например sarge, etch, lenny...). Это следующий по уровню каталог, после --host далее --root, далее каталог dist и каталог в нём будет --dist * --section - название секции, которая нам нужна (например non-free, если не одна - разделитель запятая без пробелов, типа non-free,main) * --arch - архитектура. Здесь, насколько смог, пояснил на примере реального зеркала, полужирным выделены важные каталоги, красным - нужные нам параметры и что вместо них подставлять. http://backports.org/ [DIR] debian/ это --root= [TXT] README.mirrors.html 08-Jun-2007 07:41 10K [TXT] README.mirrors.txt 08-Jun-2007 07:41 7.6K [ ] archive.key 20-Apr-2006 08:32 1.9K [DIR] dists/ 10-Apr-2007 12:24 - [DIR] etch-backports/ это --dist= 08-Jun-2007 07:38 - [ ] Release.gpg 08-Jun-2007 07:38 189 [DIR] contrib/ это --section= 10-Apr-2007 12:24 - [DIR] main/ это --section= 10-Apr-2007 12:24 - [DIR] non-free/ это --section= 10-Apr-2007 12:24 [DIR] sarge-backports/ 08-Jun-2007 07:38 - [DIR] doc/ 02-Sep-2005 19:14 - [DIR] indices/ 08-Jun-2007 07:38 - [ ] ls-lR.gz 08-Jun-2007 07:38 386K [ ] ls-lR.patch.gz 08-Jun-2007 07:38 15K [TXT] new.html 08-Jun-2007 09:50 3.4K [DIR] pool/ 16-Jan-2006 11:35 - [DIR] project/ 15-Dec-2005 22:12 - [TXT] removals.txt 07-May-2007 21:59 40K [TXT] robots.txt 19-Apr-2005 21:03 26 [TXT] style.css 07-May-2005 15:11 1.7K [DIR] tools/ После этого запустится программа и, если нам повезёт, начнут копироваться пакеты и складываться в локальные каталоги. Поползут строки типа: Getting: pool/main/l/linux-2.6.16/linux-image-2.6.16-2-686-smp_2.6.16-18~bpo.1_i386.deb... ok Getting: pool/main/l/linux-2.6.16/linux-image-2.6.16-2-686_2.6.16-18~bpo.1_i386.deb... ok Getting: pool/main/l/linux-2.6.16/linux-image-2.6.16-2-k7-smp_2.6.16-18~bpo.1_i386.deb... ok Это копируются пакеты. Всё отлично, переходим дальше. 3. Разделяем пакеты в каталоги размера DVD-образа Каталог с репозиторием больше, чем можно записать на болванку - следовательно, распределяем по каталогам, суммарный объём файлов которых не превышает CD / DVD диск. Нужно установить пакет debpartial: aptitude install debpartial Далее делаем каталог для записи на DVD (например, etch-backports-dvd): mkdir etch-backports-dvd и создаём с помощью debpartial описание пакетов в каждом диске: debpartial --nosource --dirprefix=backports-etch --section=main,non-free --dist=etch-backports --size=DVD backports-etch backports-etch-dvd Для других архитектур, например для amd64, нужно указать явно архитектуру: debpartial --nosource --arch=amd64 --section=non-free --dist=etch --size=DVD non-free non-free-dvd/ И снова несколько пояснений. Указываем те секции, которые указали при скачивании командой debmirror, название дистрибутива из --dist, размер (CD или DVD). Потом сначала пишем откуда создавать описания, а потом куда (в каталог, который будем нарезать на болванку). После этого поползут строчки вида: Reading dists/etch-backports/main/binary-i386/Packages.gz... done Reading dists/etch-backports/non-free/binary-i386/Packages.gz... done backports-etch0: 260 packages. Size: 1014633860 [ openoffice.org-l10n-de, ... ] /usr/bin/debpartial:230: warning: Insecure world writable dir /usr/local/matlab7 in PATH, mode 040777 Writing Packages.gz of backports-etch0 for (etch-backports,main,i386)... 252. Writing Packages.gz of backports-etch0 for (etch-backports,non-free,i386)... 8. А когда всё успокоится, в каталоге (в этом примере) etch-backports-dvd появятся подкаталоги с номерами, начиная с 0, в которых скопированы описания пакетов. В моём примере создался один каталог, так как пакетов немного: backports-etch0 Теперь нам потребуется язык ruby, который скорее всего уже установлен, но тем не менее: aptitude install ruby После этого создаём файл скрипта под названием debcopy и записываем в него следующее (оригинал кода здесь): #!/usr/bin/ruby # # debcopy - Debian Packages/Sources partial copy tool # # Usage: debcopy [-l] # # where is a top directory of a debian archive, # and is a top directory of a new debian partial archive. # # debcopy searches all Packages.gz and Sources.gz under /dists # and copies all files listed in the Packages.gz and Sources.gz # files into from . -l creates symbolic links # instead of copying files. # # Copyright (C) 2002 Masato Taruishi # # This program is free software; you can redistribute it and/or modify # it 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. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License with # the Debian GNU/Linux distribution in file /usr/share/common-licenses/GPL; # if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA # require 'getoptlong' require 'zlib' require 'ftools' $link = false def usage $stderr.puts "Usage: #{__FILE__} [-l] " exit 1 end def each (file, █) fin = Zlib::GzipReader.open(file) fin.each do |line| yield line end fin.close end def each_file (file, &block) each(file) do |line| if /Filename: (.*)/ =~ line yield $1 end end end def each_sourcefile (file, █) dir = nil each(file) do |line| case line when /^Directory: (.*)$/ dir = $1 when /^ \S+ \d+ (\S+)$/ yield dir + "/" + $1 end end end def calc_relpath (source, dest) pwd = Dir::pwd Dir::chdir source source = Dir::pwd Dir::chdir pwd Dir::chdir dest dest = Dir::pwd Dir::chdir pwd src_ary = source.split("/") src_ary.shift dest_ary = dest.split("/") dest_ary.shift return dest if src_ary[0] != dest_ary[0] src_ary.clone.each_index do |i| break if src_ary[0] != dest_ary[0] src_ary.shift dest_ary.shift end src_ary.size.times do |i| dest_ary.unshift("..") end dest_ary.join("/") end def do_copy(path) if $link pwd=calc_relpath(File.dirname($dest_dir + "/" + path), $source_dir) File.symlink(pwd + "/" + path, $dest_dir + "/" + path) else File.copy($source_dir + "/" + path, $dest_dir + "/" + path) end end def copy(path) s=$source_dir + "/" + path d=$dest_dir + "/" + path if FileTest.exist?(d) $stats["ignore"] += 1 return end if FileTest.exist?(s) File.mkpath(File.dirname(d)) do_copy(path) $stats["copy"] += 1 else $stats["notfound"] += 1 $stderr.puts s + " not found." end end opts = GetoptLong.new(["--symlink", "-l", GetoptLong::NO_ARGUMENT], ["--help", "-h", GetoptLong::NO_ARGUMENT]) opts.each do |opt,arg| case opt when "--symlink" $link = true when "--help" usage end end usage if ARGV.size != 2 $source_dir = ARGV.shift $dest_dir = ARGV.shift if $link $source_dir = Dir::pwd + "/" + $source_dir unless $source_dir =~ /\A\// $dest_dir = Dir::pwd + "/" + $dest_dir unless $dest_dir =~ /\A\// end $stats = {} $stats["ignore"] = 0 $stats["copy"] = 0 $stats["notfound"] = 0 open("|find #{$dest_dir}/dists -name Packages.gz") do |o| o.each_line do |file| file.chomp! print "Processing #{file}... " $stdout.flush each_file(file) do |path| copy(path) end puts "done" end end open("|find #{$dest_dir}/dists -name Sources.gz") do |o| o.each_line do |file| file.chomp! print "Processing #{file}... " $stdout.flush each_sourcefile(file.chomp) do |path| copy(path) end puts "done" end end puts "Number of Copied Files: " + $stats["copy"].to_s puts "Number of Ignored Files: " + $stats["ignore"].to_s puts "Number of Non-existence File: " + $stats["notfound"].to_s Даём ему права на исполнение и пишем: ruby debcopy backports-etch/ backports-etch-dvd/backports-etch0/ Начнётся процесс копирования, который может отнять много времени. Терпеливо ждём, потягивая кофе / чай / коньяк (нужное подчеркнуть). Закончится это всё примерно следующим: Processing backports-etch-dvd/backports-etch0//dists/etch-backports/main/binary-i386/Packages.gz... done Processing backports-etch-dvd/backports-etch0//dists/etch-backports/non-free/binary-i386/Packages.gz... done /usr/bin/myscript/debcopy:144: warning: Insecure world writable dir /usr/local/matlab7 in PATH, mode 040777 Number of Copied Files: 260 Number of Ignored Files: 0 Number of Non-existence File: 0 Повторяем это для всех директорий с номерами (backports-etch0/ backports-etch1/ ... backports-etchN/), получаем копию репозитория, нарезанного на каталоги подходящего размера. 4. Создаём ISO-образы и пропаливаем на болванки Если хочется пользоваться репозиторием на болванках на других машинах, нужно нарезать репозиторий на диски. Тут всё просто: создаём ISO-образ: mkisofs -f -J -r -o backports-etch0.iso backports-etch-dvd/backports-etch0 Не забываем повторить эту команду для всех директорий с номерами (backports-etch0/ backports-etch1/ ... backports-etchN/), получаем ISO-образы и пропаливаем их на диски своей любимой программой прожига. Ссылки Собственно, пост является переводом и расширением этой замечательной статьи. Решение, может, и не лучшее, но мне оно нравится тем, что работает :-) Так же очень толковое руководство тут.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру