Разделение репозитория Ubuntu на DVD: различия между версиями
Перейти к навигации
Перейти к поиску
Gumanoed (обсуждение | вклад) (Новая: ===Распределяем содержимое репозитория=== Распределяем содержимое репозитория на 4 части объема debpa...) |
Gumanoed (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | + | ==Распределяем содержимое репозитория== | |
| − | |||
Распределяем содержимое репозитория на 4 части объема | Распределяем содержимое репозитория на 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/ | 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/ubuntu0 | ||
ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu1 | ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu1 | ||
| Строка 12: | Строка 13: | ||
ruby debcopy /home/ftp/feisty/ /home/ftp/iso/ubuntu3 | 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) 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) 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) 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 | ||
Версия 12:11, 14 сентября 2007
Содержание
Распределяем содержимое репозитория
Распределяем содержимое репозитория на 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