Мы создадим собственный репозиторий дистрибутива доступный на сервере локально, по сети по протоколу FTP или-и HTTP, а в виде ISO-образов по протоколу FISH (SSH), но, хранящийся фактически лишь в файлах-образах дистрибутива. Рассматривается реализация на платформе ALT Linux Server 4 (ALS4) однако данный способ переносим и на другие дистрибутивы, с соответствующими поправками. Особенностями ALS4 являются:
1) наличие 2-х DVD9 носителей и 2-х CD, которые суммарно занимают почти 17ГБ и, в целом, работа с DVD9 отличается малой производительностью, что приводит к повышенным затратам времени.
2) ProFTP входящий в дистрибутив не поддерживает "большие файлы"
3) ядро поддерживает лишь 4-е loop устройства (что несколько удивляет)
4) работа с репозиторием осуществляется средствами APT (http://en.wikipedia.org/wiki/Advanced_Packaging_Tool)
Что мы достигнем в итоге:
1) повышения производительности и удобство для работы с репозиторием дистрибутива (в разы);
2) достигнем максимальной эффективности хранения репозитория;
3) также, некоторые читатели заинтересуются виртуальными файловыми системами (VFS), которые, в частности,находят применение в построении защищённых информационных систем (ЗИС).
При этом, мы выполним весьма мало очень простых манипуляций, которые, хотя и потратят наше время, зато в дальнейшем, неоднократно принесут пользу (сэкономив время и усилия).
Вкратце рассмотрим состав дистрибутива (кому неинтересно - можно не заострять внимания)
Дистрибутив состоит из двух почти одинаковых частей (некоторые особенности присутствуют в каждой)
1-ая предназначена для архитектуры x86_32
2-ая предназначена для архитектуры x86_64
в свою очередь,каждая из этих частей состоит из:
1) установочного загрузочного (boot) CD, собственно (Server), с функциями Теста памяти и Аварийной загрузки
2) дополнительного DVD9 (Contrib) для которого "не гарантирована поддержка в рамках Server" (спасибо Афонину за уточнение)
упаковку, наклейки, инструкцию, лицензию мы не рассматриваем
А теперь собственно приступим к построению репозитория, предполагая, что сервер вы уже и только что установили с первого CD.
1. Необходимо сохранить ISO-образы дисков дистрибутива, причём сделать это можно и не только на сервере, а и на другой машине в сети, а также банально выкачать из сети, с сайта компании АЛЬТ Линукс, если позволяют финансы и провайдер. Всё же если вы располагаете дисками я укажу два самых простых (на мой взгляд) способа получения образов дисков: воспользоваться графической оболочкой k3b или в консоли dd (например dd if=/dev/cdrom of=/opt/cd1). Кроме того, если какая то архитектура вам не нужна (например x86-64), то просто ничего с ней не делайте - убъёте время траффик и т.д. Фактически, вы можете и не ощутить выигрыша от 64-х разрядной архитектуры, ибо Линукс-32 это не виндовс и способен обращаться к 4GB (HIGHMEM4G) of physical RAM а также и более, но уже с "нестандартным" ядром. Зато недостатки от Линукс-64 могут всплыть, например отсутствие wine32for64.
Если ваши образы дисков располагаются на другой машине нежели конечный сервер, а вы пользуетесь KDE, то можно воспользоваться протоколом FISH интегрированным в KDE для передачи файлов. Для этого, откройте обозреватель (konqueror) и в строке Адреса впишите fish://username@hostname причём, в качестве пользователя root выступать не может, укажите менее привилегированного пользователя, а вместо имени компьютера можно указать его IP:

возможно, вы ранее не пользовались этим сервером и он захочет передать вам свой ключ - примите его
далее вас попросят указать пароль - введите

всё. используя это окно вы сможете передать файлы образов любого размера на сервер совершенно обычными для графической оболочки способами, если что то не получается - проверьте права доступа на каталоги на сервере (например воспользовавшись в консоли ssh )
итак, я переписал файлы образов дисков на сервер в каталог /opt и назвал их вот так:
/opt/ALS4-x86-64.iso
/opt/ALS4-x86-32.iso
/opt/ALS4--DVD9-x86-64.iso
/opt/ALS4--DVD9-x86-32.iso
в этом же каталоге я создал
каталог mnt и два скрипта:
1) /opt/dmnt.sh для монтирования содержимого файлов образов в каталоге /opt/mnt/ (каждый в свою папку, не забудьте их тоже создать)
losetup /dev/loop0 ALS4--DVD9-x86-32.iso
losetup /dev/loop1 ALS4--DVD9-x86-64.iso
losetup /dev/loop2 ALS4-x86-32.iso
losetup /dev/loop3 ALS4-x86-64.iso
mount /dev/loop0 /opt/mnt/dvd32
mount /dev/loop1 /opt/mnt/dvd64
mount /dev/loop2 /opt/mnt/cd32
mount /dev/loop3 /opt/mnt/cd64
2) /opt/udmnt.sh для размонтирования файлов образов
umount /dev/loop0
umount /dev/loop1
umount /dev/loop2
umount /dev/loop3
losetup -d /dev/loop0
losetup -d /dev/loop1
losetup -d /dev/loop2
losetup -d /dev/loop3
далее я добавил символические ссылки на /opt/mnt в каталоги
/var/ftp/ALTLinux/Server4/
/var/www/apache2/html/
на самом сервере репозиториев, в /etc/apt/sources.list я записал:
# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list
rpm file:/opt/mnt/cd32/ ALTLinux asterisk base disk
rpm file:/opt/mnt/dvd32/ ALTLinux classic
а клиентам прописал в /etc/apt/sources.list заблаговременно выложив его на ftp
# Local package resource list for APT goes here.
# To inspect package defined part, see /etc/apt/sources.list.d/*.list
rpm ftp://192.168.64.23/ALTLinux/Server4/mnt/cd32/ ALTLinux asterisk base disk
rpm ftp://192.168.64.23/ALTLinux/Server4/mnt/dvd32/ ALTLinux classic
всё. запускаем
apt-get update
на всех машинах, (если что-то не так - разбираемся с каталогами и правами доступа)
ну, напоследок, расскажу в чём в вкратце смысл на примерах из всего выше:
командой
losetup /dev/loop0 ALS4--DVD9-x86-32.iso
я ассоциирую регулярный файл ALS4--DVD9-x86-32.iso с устройством петли 0 (/dev/loop0) а далее я могу монтировать устройство петли - как любое блочное устройство в указанный каталог
mount /dev/loop0 /opt/mnt/dvd32
таким образом я монтирую VFS хранящуюся в файле ALS4--DVD9-x86-32.iso в каталог
/opt/mnt/dvd32
чтобы размонтировать VFS я применяю
umount /dev/loop0
а чтобы освободить устройство петли 0 (/dev/loop0) от ассоциации с файлом ALS4--DVD9-x86-32.iso я применяю:
losetup -d /dev/loop0
если что - читайте маны и гуглите, или в жабу стучитесь
| Прикрепление | Размер |
|---|---|
| fish_home.jpg | 39.63 кб |
| fish_login.jpg | 18.35 кб |
Комментарии
Увеличение количества loop device
Проблема с маленьким количество loop device решается 2мя способами:
1. Перекомпиляцией ядра с изменением этого самого числа в одном из .h файлов
2. Передаче ядру при загрузке опции с количеством этих самых loop device.
Подробности обоих способов стоит уточнить в Google ибо последний раз я с этим игрался 2 года назад.
--
NixDev Open Source solutions for life.
Посмотрел исходники ядра
linux/drivers/block/loop.c
* Maximum number of loop devices now dynamic via max_loop module parameter.
* Russell Kroll 19990701
*
* Maximum number of loop devices when compiled-in now selectable by passing
* max_loop=<1-255> to the kernel on boot.
* Erik I. Bolsø, , Oct 31, 1999
проверяем
[cn@main ~]$ sudo su
[root@main ~]# lsmod | grep loop
[root@main ~]# modprobe loop max_loop=32
[root@main ~]# lsmod | grep loop
loop 16776 0
[root@main ~]#
[root@main ~]# mc
[root@main ~]# losetup /dev/loop30 virtual
так что действительно - вот вариант решения modprobe loop max_loop=NNN