[an error occurred while processing this directive]

Создание локального зеркала Debian (apt-mirror + ProFTPd + Apache2)
Введение: Нужно было сделать зеркало 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=view&id=171&Itemid=1
- Как создать локальное зеркало Debian/Ubuntu используя apt-mirror (перевод)
*
http://wiki.binarylife.ru/index.php/Apt-get_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8 -
 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
 
15.04.2010 , Автор: Yuri Rybnikov
Ключи: debian, apt, packet, mirror / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Linux специфика / Установка и работа с пакетами программ в Linux

[an error occurred while processing this directive]

[an error occurred while processing this directive]