Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Обновление сервера без интернета  (Прочитано 7698 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Обновление сервера без интернета
« Ответ #15 : 22 Ноября 2010, 01:54:46 »
ждем с нетерпением, честно...

Оффлайн pauls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
  • оптимист
    • Просмотр профиля
Re: Обновление сервера без интернета
« Ответ #16 : 24 Ноября 2010, 00:50:08 »
Вроде бы на шел решение и даже работает

Сначала подготовим инструменты и материалы. На сервере должен быть поднят SSH сервер и настроен на доступ по ключам с рабочей машины. Так же требуется флешка.

Флешка по умолчанию монтируется в /media/backup и имеет в корне каталог /.update На всех машинах в домашнем каталоге пользователя, от имени которого осуществляется апдейт, тоже есть каталог /.update

Придется дать пользователю, от имени которого запускается скрипт, права на беспарольную установку пакетов, апдейт и копирование из под sudo. Для этого прикрутим аутентификацию по USB.


=== Описание структуры ===

В каталоге /media/backup/.update/ имеетюся каталоги с именами обновляемых хостов. В нашем случае это /media/backup/.update/server-name и /media/backup/.update/local-comp-name но их может быть сколько угодно.

В каждом каталоге с именм хоста есть каталог /lists, где лежит база apt-get с соответствующей машины - это копия каталога /var/lib/apt/lists исключая файл lock и вложеный каталог /partail.

Там же находится каталог /pakages для пакетов апдейта.
Там же находится файл repositories.lst со списком обновляемых репозиториев.
Там же находится файл pakages.lst со списком обновляемых пакетов.

Флаг синхронизации - это пустой файл с именем sincronized. Нужен для определения того, синхронизирован каталог /lists с интернетом или нет.  Этот файл создает скрипт на рабочей машине, после обновления каталога  /var/lib/apt/lists и удаляет скрипт на машине с интернетом, если при побайтовом сравнении между скачанными с интернета и находящимися в каталоге lists/ появилась разница.

Итого структура:

(Нажмите, чтобы показать/скрыть)

=== Подготовка ===

Генерируем ключи и делимя публичным с сервером, если этого не сделано раньше
user@local:~$ ssh-keygen -t rsa
user@local:~$ ssh-copy-id -i /home/user/.ssh/id_rsa user@<ip сервера>
https://help.ubuntu.ru/wiki/ssh - для справки

На рабочей машине устанавливаем pam-usb (естественно ключевой должна быть флешка, которую мы используем для переноса обновлений)
user@local:~$ sudo ap-get install libpam-usb pamusb-tools
user@local:~$ sudo pamusb-conf --add-device имя_устройства
user@local:~$ sudo pamusb-conf --add-user имя_пользователя
user@local:~$ sudo pamusb-check имя_пользователя
+ изменить /etc/pam.d/common-auth
http://pamusb.org/ The PAM_USB Project- для справки

На сервере придется дать пользователю, от имени которого происходит апдэйт права на запись и изменение всех файлов в каталоге /var/lib/apt/lists. Я просто сделал его владельцем папки и всех файлов в ней кроме lock - он нам не нужен. (сам знаю что нехорошо сделал, но другого решения пока не вижу)

=== Рабочий алгоритм ===
Внимание! Все имена машин, пользователей, ip адреса вымышленные, для использования их надо заменить на те что есть у вас

Приходим на работу, включаем комп, втыкаем флешку, запускаем скрипт off-update-local
(Нажмите, чтобы показать/скрыть)

Приходим домой, включаем комп, втыкаем флэшку, запускаем скрипт off-update-inet, идем ужинать :)

(Нажмите, чтобы показать/скрыть)

Последние два действия можно запихать в автозапуск при вставке флэшки как описано в PAM_USB Project, но я этого делать не буду пока не прикручу к этим скриптам полную обработку ошибок с оповещением и запись всех действий в лог.

Обновления на рабочую машину ставятся автоматом, а когда появляются обновления для сервера - нас извещают, можно зайти по ssh и выполнить команду вида:
user@server:~$ sudo dpkg -i ~/.update/pakages/*deb
или прямо с рабочей машины
user@local:~$ ssh user@server 'sudo dpkg -i ~/.update/pakages/*deb'
=== Недостатки метода: ===

1) Все заточено под конкретную ситуацию и в других условиях работать не будет.
2) На машине с инетом при каждом запуске скрипта выкачивается значительный объем информации (в данный момент у меня около 132 MB)
3) При установке большого количества пакетов иногда роисходит нарушение зависимостей из-за порядка следования имен пакетов - ничего страшного, запускаем установку по новой и все нормально, но раздражает.
4) В нашей работе появился хардварный ключ, который позволяет делать команды от sudo без ввода пароля - это расслабляет. К тому же можно забыть вытащить флешку, когда отходишь по делам (а если рядом есть любознательный организм, то может случится полный nord fox).

Последняя проблема решается блокировкой компа по блютузу с привязкой к телефону (пакет libpam-blue) но это отдельная история.

=== Достоинства ===

При таком подходе можно обновлять сервер и рабочую машину без графического интерфейса с машины другой архитектуры и даже другого дистрибутива
Можно неделями обновлять глухой сервер и рабочую машину без интернета вводя руками только одну команду. Это нам и требовалось!

PS: это совсем не окончательный вариант, а рабочая "бета". Я думаю, что отполирую ее (проверка ошибок, уведомления, ведение логов и т.п.) месяца за два. Буду благодарен за конструктивную критику и предложения по улучшению

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Обновление сервера без интернета
« Ответ #17 : 24 Ноября 2010, 13:00:50 »
вы молодец, но вы реально параноик. у меня один вопрос: в какой организации вы работаете?
из недостатков метода: установка пакетов с помощью dpkg для ubuntu не совсем Ъ, это все равно что устанавливать пакеты руками. может есть смысл сделать директорию-репозиторий, куда бы вы подкидывали все пакеты, которые нужны, а всем остальным занимался бы apt-get. тогда бы ваш недостаток №3 был бы решен ;)
ну это так на вскидку, вечерком можно еще подумать...

Оффлайн pauls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
  • оптимист
    • Просмотр профиля
Re: Обновление сервера без интернета
« Ответ #18 : 24 Ноября 2010, 18:59:37 »
2truegeek
Цитировать
может есть смысл сделать директорию-репозиторий, куда бы вы подкидывали все пакеты, которые нужны, а всем остальным занимался бы apt-get
Я не знаю как это сделать. Расскажите пожалуйста или поделитесь ссылкой и я сделаю.

Оффлайн truegeek

  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Обновление сервера без интернета
« Ответ #19 : 25 Ноября 2010, 00:10:05 »
по-моему, поисковые слова "локальный репозиторий" подойдут

 

Страница сгенерирована за 0.018 секунд. Запросов: 20.