Разделение репозитория Ubuntu на DVD: различия между версиями
Перейти к навигации
Перейти к поиску
Gumanoed (обсуждение | вклад) |
Avp (обсуждение | вклад) |
||
| Строка 184: | Строка 184: | ||
mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 3/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd3.iso ./ubuntu2 | mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 3/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd3.iso ./ubuntu2 | ||
mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 4/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd4.iso ./ubuntu3 | mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 4/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd4.iso ./ubuntu3 | ||
| + | |||
| + | [[Категория:Ubuntu]] | ||
Текущая версия на 09:42, 28 июля 2021
Содержание
Устанавливаем необходимый набор инструментов
Для выполнения поставленной задачи нам понадобится интерпретатор языка ruby и пакет debpartial для деления репозитория.
aptitude install debpartial ruby
Распределяем содержимое репозитория
Распределяем содержимое репозитория на 4 части объема
debpartial --nosource --dirprefix=ubuntu --section=main,restricted,universe,multiverse --dist=feisty,feisty-updates,feisty-backports,feisty-security --size=DVD /home/ftp/feisty/ /home/ftp/iso/
Копируем необходимые файлы
Исполняем программу на языке ruby, которая сформирует для нас необходимую структуру файлов и папок в 4 директориях.
ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu0 ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu1 ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu2 ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu3
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, &block)
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, &block)
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
Создаем образы дисков
Создаем из директорий со сформированной структурой файлов и папок образы для записи на диски.
mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 1/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd1.iso ./ubuntu0 mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 2/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd2.iso ./ubuntu1 mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 3/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd3.iso ./ubuntu2 mkisofs --iso-level 4 -f -J -l -r -V "Ubuntu 7.04 $(date -I) 4/4" -o ./Ubuntu\ DVD\ repository/ubuntu-7.04-$(date -I)-complete-i386-dvd4.iso ./ubuntu3