offline обновление

Так получилось, что переехав на новую квартиру я остался без интернета. Соответственно встала проблема обновления системы. Подумал, ведь доступ через 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. Всё, система обновлена.