Введение: Нужно было сделать зеркало Debian в локальной сети университета. Под эти нужны была создана виртуальная машина и установлен "голый" Debian.
IP адрес достался по-наследству от старого зеркала: 192.168.1.200.
Были поставленыVMware Tools. И всё сконфигурировано для работы.++ Далее пойдем по порядку.
В нашем университете используется прокси-сервер,
и чтобы установить его по умолчанию в файл конфигурации окружения /etc/profile необходимо внести изменения, а именно добавить:
export http_proxy=http://192.168.251.1:8080/
export ftp_proxy=ftp://192.168.251.1:8080/
Ставим пакет, который будет выполнять зеркалирование apt-mirror:
apt-get install apt-mirror
Дальше нам надо определиться с файлом конфигурации зеркала. Что будет зеркалироваться и откуда.
Так как через университетский прокси доступно быстрое зеркало http://ftp.mgts.by/debian
Правим /etc/apt/mirrors.list:
# apt-mirror configuration file
##
## The default configuration options (uncomment and change to override)
##
#
set base_path /var/spool/apt-mirror
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
#set defaultarch i386
set nthreads 20
set _tilde 0
# etch's section
#deb http://ftp.mgts.by/debian etch main contrib non-free
# lenny's section
deb http://ftp.mgts.by/debian lenny main contrib non-free
# squeeze's section
deb http://ftp.mgts.by/debian squeeze main contrib non-free
# sid's section
deb http://ftp.mgts.by/debian sid main contrib non-free
##
## Cleaner configuration example
##
set cleanscript $var_path/clean.sh
# Cleaning section
clean http://ftp.mgts.by/
skip-clean http://ftp.mgts.by/debian/doc/
Что бы не было ошибки при выполнении /var/spool/apt-mirror/var/clean.sh надо пропатчить /usr/bin/apt-mirror
Содержание файла apt-mirror.patch:
--- /usr/bin/apt-mirror 2007-12-02 11:22:02.000000000 +0100
+++ apt-mirror-patched 2008-06-15 11:28:47.000000000 +0200
@@ -518,14 +518,14 @@
my $dir = shift;
my $is_needed = 0;
return 1 if $skipclean{$dir};
- opendir(DIR, $dir) or die "apt-mirror: can't opendir $dir: $!";
- foreach (grep { !/^\.$/ && !/^\.\.$/ } readdir(DIR)) {
+ opendir(my $dir_h, $dir) or die "apt-mirror: can't opendir $dir: $!";
+ foreach (grep { !/^\.$/ && !/^\.\.$/ } readdir($dir_h)) {
my $item = $dir . "/". $_;
$is_needed |= process_directory($item) if -d $item && ! -l $item;
$is_needed |= process_file($item) if -f $item;
$is_needed |= process_symlink($item) if -l $item;
}
- closedir DIR;
+ closedir $dir_h;
push @rm_dirs, $dir unless $is_needed;
return $is_needed;
}
Патчим:
cat apt-mirror.patch | patch -p1
Логинимся под пользователем apt-mirror:
su - apt-mirror
Запускаем программу зеркалирования:
apt-mirror
Идем пить чай.
Оговорюсь, в зависимости от количества дистрибутивов выбранных для зеркалирования и каталогов для зеркалирования объем скачанной информации может быть очень большой.
Поэтому запаситесь терпением и работайте в screen'е :)
Должны быть всякие сообщения о том что всё ок. А при ошибке надо гуглить и исправлять.
После окончания успешного зеркалирования выполняем /var/spool/apt-mirror/var/clean.sh:
# /bin/bash /var/spool/apt-mirror/var/clean.sh
Чистим от "шлаков". И освобождаются Гигабайты пространства.
Настраиваем автоматизацию по планировщику. Правим планировщик для проверки зеркала каждый день в час ночи и очистки от "мусора" в четыре утра.
В /etc/cron.d/apt-mirror добавляем:
#
# Regular cron jobs for the apt-mirror package
#
0 1 * * * apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
0 4 * * * root /bin/bash /var/spool/apt-mirror/var/clean.sh > /var/spool/apt-mirror/var/cron_cl.log
#
Ставим apache2 для доступа по HTTP к зеркалу:
apt-get install apache2
Делаем доступ к зеркалу через HTTP, для этого создаем симлинк:
ln -s /var/spool/apt-mirror/mirror/ftp.mgts.by/debian /var/www/debian
Далее делаем, как и положено, ссылку на stable дистрибутив:
cd /var/spool/apt-mirror/mirror/ftp.mgts.by/debian/dists
ln -s lenny/ stable
Дальше надо сделать доступ по FTP к зеркалу с помощью сервера ProFTPd:
apt-get install proftpd
Конфигурируем его. Правим /etc/proftpd/proftpd.conf под наши нужды:
Include /etc/proftpd/modules.conf
UseIPv6 off
IdentLookups off
ServerName "Debian mirror"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
RequireValidShell off
# Port 21 is the standard FTP port.
Port 21
MaxInstances 30
User proftpd
Group nogroup
Umask 022 022
AllowOverwrite on
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
User ftp
Group nogroup
UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
# Пускать пользователей с шелом /bin/false и прочей невалидной ерундой
RequireValidShell off
MaxClients 100
Так как ProFTPd не понимает симлинки за пределы текущего FTP-дерева, то сделаем хитрый mount:
mkdir /home/ftp/debian
mount --bind /var/spool/apt-mirror/mirror/ftp.mgts.by/debian /home/ftp/debian
Чтобы не пропадал mount после перезагрузки в /etc/fstab вносим изменения, добавляем в конец строчку:
/var/spool/apt-mirror/mirror/ftp.mgts.by/debian /home/ftp/debian none bind
Всё. Готово. Для уверенности можем перезагрузить сервер и понять, что всё будет работать :)
++ Ссылки:
* http://apt-mirror.sourceforge.net - apt-mirror (apt sources mirroring tool)
* http://www.howtoforge.com/local_debian_ubuntu_mirror - How To Create A Local Debian/Ubuntu Mirror With apt-mirror
* http://www.linuxnsk.ru/index.php?option=com_content&task=vie... - Как создать локальное зеркало Debian/Ubuntu используя apt-mirror (перевод)
* http://wiki.binarylife.ru/index.php/Apt-get_%D1%87... - Apt-get через прокси
* http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=484876 - apt-mirror: many closedir() errors
* http://itblog.su/proftpd-vs-symlinks.html - proftpd vs symlinks
* http://sudouser.com/nastrojka-cron - Настройка Cron
URL:
Обсуждается: http://www.opennet.dev/tips/info/2345.shtml