offline обновление

Изображение пользователя ploop.

Так получилось, что переехав на новую квартиру я остался без интернета. Соответственно встала проблема обновления системы. Подумал, ведь доступ через GPRS есть всегда! Обновить список пакетов не так уж много трафика занимает, а сами пакеты можно закачать там, где есть свободный доступ в сеть.

Но делать это вручную лень. Поэтому написал небольшой скрипт:

Развернуть/свернуть скрытый текст.
#!/bin/bash

#-----------------------------------------------#
# Скрипт создаёт сценарий, который         #
# закачивает обновления и сохраняет в #
# каталог, откуда был запущен #
#-----------------------------------------------#

folder='updates' # Каталог с обновлениями
filename='download-updates' # Имя выходного скрипта
sudopass='XXXXXX' # Пароль администратора

#-----------------------------------------------

cd "$(dirname "$0")"

# Подготовим папку
echo $sudopass | sudo -S rm -rf $folder 2>/dev/null
mkdir $folder

# Обновим apt, и создадим список пакетов
echo $sudopass | sudo -S apt-get update -q 2>/dev/null
plist=$(echo $sudopass | sudo -S apt-get --print-uris -y dist-upgrade)

# Создадим шаблон сценария и сделаем его исполняемым
echo '#!/bin/bash' >> $folder'/'$filename
echo '#---------------------------------------------#' >> $folder'/'$filename
echo '# Автоматический сценарий загрузки обновлений #' >> $folder'/'$filename
echo '# '$(date)'                #' >> $folder'/'$filename
echo '#---------------------------------------------#' >> $folder'/'$filename
echo '' >> $folder'/'$filename
echo 'cd "$(dirname "$0")"' >> $folder'/'$filename
echo '' >> $folder'/'$filename
echo $sudopass | sudo -S chmod +x $folder'/'$filename

# Распарсим вывод apt-get'а и добавим ссылки в список
ok=0
for str in $plist
do
out=$(echo $str | grep 'http://')
if ! [[ -z $out ]]
then
echo 'wget '$out >> $folder'/'$filename
ok=1
fi
done
if [[ $ok = 0 ]]
then
echo ' Система не требует обновления!'
echo 'echo " Система не требует обновления!"' >> $folder'/'$filename
fi

Как пользоваться:
0. Пропишите пароль администратора в скрипте (в начале)
1. Если не хотите хранить административный пароль внутри скрипта, уберите в двух местах вызов sudo ("echo $sudopass | sudo -S") и запускайте весь скрипт через sudo
2. Подключитесь к интернету любым возможным способом (GPRS, dial-up) и запустите скрипт
3. Когда он отработает, отключайтесь, берите папку 'updates', которая появится рядом со скриптом, и тащите её туда, где есть интернет и стоит linux. (или возьмите с собой live-cd на всякий случай)
4. Запустите скрипт внутри папки 'updates' и курите, пока он не закачает всё, что нужно
5. Тащите папку 'updates' вместе с её содержимым обратно.
6. Через терминал сделайте папку текущей (cd <имя_папки>) и выполните команду dpkg -i *.deb
7. Всё, система обновлена.

Комментарии (21)

0
Voyageur - 15 Январь, 2010 - 11:32
Изображение пользователя Voyageur.

Вот это хорошее дело! Думаю, что пригодится многим, у кого на работе есть интернет, а дома - нет (или медленный).

0
ploop - 15 Январь, 2010 - 12:20
Изображение пользователя ploop.

Примерно так поступает Synaptic, если выбрать в меню "Файл -> Создать сценарий закачки пакетов" Может что-нибудь подобное и с обновлениями есть, но я этого не знаю...

0
Жюстина - 15 Январь, 2010 - 15:28
Изображение пользователя Жюстина.

А dpkg -i *.deb разве увидит в этой папке зависимые пакеты от того первого, который он начнёт устанавливать и не потянется ли в интернет?

0
ploop - 15 Январь, 2010 - 17:01
Изображение пользователя ploop.

Не должен, по идее apt всё что нужно стянет. Ща на работе закачал пакеты по сгенерёному вчера скрипту, приду домой проверю.

0
rlepish - 16 Январь, 2010 - 00:43

я все время обновляюсь оффлайн. составляя список обновлений с помощью sudo apt-get update и apt-get dist-upgrade -y --print-uris | cut -d"'" -s -f2 > ~/onovl/upgrade_package_names.txt, и далее скачав необходимые дебы, обновляюсь из локального репозитория.

так вот, обновляясь на новые версии КДЕ с помощью команды dpkg -i *.deb получал убитую систему, поэтому пришлось отказаться и перейти на обновление из локального репозитория

правда, в 9.10 для того чтоб система обновлялась из локального репозитория, приходится подсовывать на время обновления sourses.list, содержащий только строку с локалным репозиторием и разрешать обновлятся на неподписанные пакеты

0
ploop - 16 Январь, 2010 - 01:13
Изображение пользователя ploop.

Ну, вместо dpkg действительно лучше штатный механизм использовать. Текущие обновления поставились, но это могло быть просто везение.

ЗЫ: Проверял на ubuntu 9.10

0
rlepish - 14 Март, 2015 - 14:16

Не могу отредактировать сообщение
Составляю список обновлений с помощью sudo apt-get update && sudo apt-get dist-upgrade -y --print-uris | cut -d"'" -s -f2 > ~/upgrade_package_names.txt.
Скачанные файли копирую в /var/cache/apt/archives и коммандой sudo apt-get upgrade обновляю

0
kot040188 - 14 Март, 2015 - 14:28
Изображение пользователя kot040188.

Не могу отредактировать сообщение
Потому что на него уже ответили ;)

0
ploop - 15 Январь, 2010 - 17:50
Изображение пользователя ploop.

Всё прошло как по маслу, установил 50Мб пакетов без единой ошибки. Так что способ можно считать рабочим :)

0
DarkneSS - 15 Январь, 2010 - 19:15
Изображение пользователя DarkneSS.

Альтернатива:
В консоли выполняем sudo apt-get update. Теперь, получим список адресов для скачки пакетов. Мне известны две команды: sudo apt-get --print-uris -y dist-upgrade | grep "^'" | awk '{ print $1 }' | sed "s/'//g" > packages.lst и sudo apt-get dist-upgrade -y --print-uris | cut -d"'" -s -f2 > ~/upgrade_package_names.txt. Файлы появятся в домашнем каталоге (содержимое не отличается). Огромное спасибо за эту хитрость Toliano и ColdEgo
Качаем debы по списку.
Открываем krusader с правами root и копируем скачанные deb-файлы в /var/cache/apt/archives. Запускаем консоль и вводим sudo aptitude full-upgrade
Причём вторую часть рекомендую автору вместо dpkg. Так будет лучше ;-)

0
Michael72 - 13 Апрель, 2010 - 20:55
Изображение пользователя Michael72.

Открываем krusader с правами root и копируем скачанные deb-файлы в /var/cache/apt/archives.

А я не понимаю смысла в пакете krusader. Я по рекомендации Toliano копировал сразу в /var/cache/apt/archives и затем 8 пункт по этой же инструкции. Получалось.
P.S.
Ой, жалко уже не удалить свой комментарий... Если бы сказали Dolphin, то сразу бы понял. А так... не сразу даже догадался поискать, что это такое. Улыбку ставить - не вижу смысла, см. фото.

0
DarkneSS - 13 Апрель, 2010 - 22:47
Изображение пользователя DarkneSS.

Писал, как делаю сам. krusader - это файловый менеджер, плюсы которого - тема отдельной статьи. Вопрос в том, кому как удобнее и привычнее =)

0
ploop - 15 Январь, 2010 - 20:00
Изображение пользователя ploop.

... sudo aptitude full-upgrade
Причём вторую часть рекомендую автору вместо dpkg. Так будет лучше ;-)

Согласен. Спасибо за поправку. Надо добавить скрипт установки (копировать и full-upgrade сделать) :)

0
DarkneSS - 16 Январь, 2010 - 00:45
Изображение пользователя DarkneSS.

Good Luck!!

0
ploop - 18 Январь, 2010 - 10:27
Изображение пользователя ploop.

Вот, собственно, определился и настроился с обновлениями и установкой ПО.
- Дома: щёлкаем ярлык, запускается скрипт, обновляет apt, делает список uri и копирует в архив на флешку.
- На работе: щёлкаем ярлык, с флешки распаковывается архив на комп, качаются пакеты, папка архивируется и заменяет старый архив на флешке.
Опять дома: щёлкаем тот же ярлык, скрипт видит, что в архиве есть пакеты, значит не обновляет apt, а копирует их в /var/cache/apt/archives и запускает aptitude full-upgrade

Итог: все манипуляции сводятся к "вставил флешку, щёлкнул ярлык, вынул флешку" :)

0
Michael72 - 13 Апрель, 2010 - 11:42
Изображение пользователя Michael72.

Идея интересная, а нельзя выложить реализацию этого механизма, т.е. сами ярлыки, для ленивого?

0
Гость - 28 Февраль, 2010 - 00:37

Спасибо всем большое за это статью. Вот недавно как раз подумал об это и искал способ воплотить это в жизнь. Вот только у меня ситуация противоположная, у меня на работе интернет медленный, а дома нормальный.

+1
poruchik - 5 Март, 2010 - 20:59
Изображение пользователя poruchik.

Молодой проект, позволяющий выполнять установку и обновление пакетов для автономных систем с флешки или переносного диска.
ketrix

Из описания:
Keryx является переносимым, кросс платформенным менеджером пакетов для основанных на APT (Ubuntu, Debian) систем. Он обеспечивает графический интерфейс для сбора обновлений, пакетов и зависимостей для автономных компьютеров. Keryx является свободным проектом с открытым исходным кодом.

Статья о проекте на русском есть в Full Cicle #32 (декабрь 2009) (стр. 14)

0
Michael72 - 13 Апрель, 2010 - 20:49
Изображение пользователя Michael72.

Пожалуй, лучше будет прямая ссылка на утилиту Sushi, huh?

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры