Обновление и установка пакетов через медленное интернет-соединение

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Не всем везёт иметь быстрый интернет.
Если скорость соединения с интернетом низкая, то обновлять систему или устанавливать тяжелые пакеты
стандартным способом достаточно опасно. Какой-нибудь пакет может скачаться с ошибкой и при установке
что-нибудь сломать. Исправить возникшую проблему будет сложно, или вовсе невозможно и придется
переустанавливать систему, а потом… В общем, лучше пойти другим путем и значительно снизить
вероятность возникновения проблем.

Будьте готовы к работе в эмуляторе терминала. В KDE4/KDE5(PLASMA5) — konsole. В XFCE — xfce4-terminal.
В GNOME — gnome-terminal. В LXQT — qterminal. Либо в любом другом установленном в системе.

Если у вас нет второго компьютера советую сделать загрузочную флешку с росой и перед каждым обновлением
на всякий случай держать ее рядом. Я некоторое время даже делал резервную копию корневого раздела с
помощью qt5-fsarchiver, перед тем, как обновляться. Правда ни разу так и не пришлось из нее восстанавливаться...
Но загрузочная флешка несколько раз меня выручала.

P.S.
Если в этом нет особой необходимости — не обновляйтесь. Не зря же говорят: "Работает — не трогай!".

P.P.S.
Тут оказывается имеется слишком много нюансов, поэтому не уверен, что у меня получится доступно всё
объяснить...
Ну и не судите строго — это моя первая инструкция.



Обновление системы

Вариант 1

Когда соединение медленное, но достаточно стабильное

Если последнее обновление было больше недели назад очень высока вероятность того, что оно будет в два
этапа. Насколько я понимаю, в этом случае сначала должны обновиться программы, которые отвечают за
загрузку файлов из интернета (wget и/или curl) и программы управляющие пакетами (rpm и/или urpmi, *URPM).
Затем всё остальное. В первом этапе пакетов будет меньше 30 и их размер не будет превышать 20МБ. Во втором
может быть любое кол-во и любой суммарный размер. Пакеты первого этапа можно сразу скачать и установить,
но на втором придется действовать по обстоятельствам. Если пакетов будет больше 15, а их суммарный
размер меньше 20МБ, то можно продолжать обновляться. В ином случае нужно обновление прерывать и запускать
команду, которая загрузит все пакеты, но не станет их устанавливать. С медленным интернетом лучше сначала
загрузить все пакеты, а потом обновить всё разом.

Если обновлялись вчера/позавчера, то обновлений может быть совсем мало и в один этап. Здесь уже смотрим, что
предлагают обновить. Если, например, два пакета, firefox и firefox-ru, с суммарным размером более 30МБ, то
их сначала нужно скачать, протестировать и только потом установить. Если пакетов 3, а размер ~10МБ — продолжаем
обновление.

Пример 1

Открываем эмулятор терминала и запускаем команду sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0'.

Screenshot 01.png

Нам предлагают загрузить 21 пакет с суммарным размером 10МБ. Пакетов много, но при этом все имеют малый
размер. Можно соглашаться на установку. Просто жмем Enter.

Screenshot 02.png

Нам предложили загрузить 562 пакета с суммарным размером 799МБ. Отказываемся — вводим n и жмем Enter.
Запускаем команду sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0' --no-install
и соглашаемся на установку. Пакеты будут загружены, но не станут устанавливаться. Если загрузка по какой-то
причине будет прерываться, предыдущую команду нужно выполнять снова, пока не будет загружено всё.

Screenshot 03.png

Когда все пакеты будут загружены, нужно протестировать установку. Запускаем команду
sudo urpmi --auto-select --test

Этот снимок пришлось сделать на реальной машине. Живой режим в виртуальной не выдержал тестирования установки 562 пакетов

Тестирование ошибок не выявило. Теперь можно обновлять систему. sudo urpmi --auto-select

Этот снимок сделан на реальной машине. Живой режим в виртуальной не выдержит установки 562 пакетов

Пример 2

Открываем эмулятор терминала и запускаем команду sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0'.

Screenshot 16.png

Нам предлагают обновить 3 пакета с суммарным размером 62МБ. Отказываемся и запускаем команду
sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0' --no-install
Если загрузка будет прерываться, эту команду нужно выполнять пока пакеты не будут полностью загружены.

Пакеты загрузились? Тестируем установку — sudo urpmi --auto-select --test

Screenshot 17.png

Установка возможна. Обновляем — sudo urpmi --auto-select

Пример 3

File:Пример1-3.zip

Вариант 2

Когда соединение медленное и нестабильное

Пример 1

Открываем эмулятор терминала и обновляем источники sudo urpmi.update -a --downloader wget --wget-options '-c -t 0'

Screenshot 06.png

Запускаем команду sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0' --no-install

Screenshot 07.png

На предложение соглашаемся. Пакеты загрузятся, но не будут устанавливаться.

Screenshot 07 01.png

От предложения загрузить и установить другие пакеты — отказываемся.
Запускаем sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0'

Screenshot 08.png

Соглашаемся на установку.

Screenshot 09.png

Отказываемся. Запускаем снова sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0' --no-install
и соглашаемся загрузить предложеные пакеты. Если загрузка по какой-то причине будет прерываться, предыдущую
команду нужно выполнять снова, пока не будет загружено всё.

Screenshot 10.png

Запускаем тестирование — sudo urpmi --auto-select --test

Screenshot 11.png

Тестирование ошибок не выявило. Теперь можно обновлять систему. sudo urpmi --auto-select

Пример 2

File:Пример2.zip

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

Пример 3

File:Пример3.zip

Установка пакетов

Пример 1 (с ошибкой)

Установка wine

Обновляем источники. sudo urpmi.update -a --downloader wget --wget-options '-c -t 0'

Screenshot 12.png

Загружаем wine и все требуемые зависимости. sudo urpmi --downloader wget --wget-options '-c -t 0' wine --no-install

Screenshot 13.png

Если загрузка прервется, повторяем предыдущую команду.

Screenshot 14.png

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

Если ошибку исправили, обновляем источники, загружаем wine со всеми зависимостями. Когда всё загрузится
запускаем тест установки. sudo urpmi wine --test. Если будет ответ "Установка возможна", устанавливаем
sudo urpmi wine

PS.
Даже интересно стало. Более трех дней ожидания и никаких изменений. Попытка установить wine проводилась
на образе с abf.io от 22 ноября 2019 года. Для пробы попытался произвести установку этой программы в релизном
ROSA.FRESH.PLASMA5.R11, но получил ту же ошибку.
Скачал с abf новый образ от 4 февраля. При установке wine выводится предупреждение о том, что некоторые
пакеты имеют неверные подписи. Если отключить проверку (параметр --no-verify-rpm), то они тестируются и
устанавливаются.
Ради эксперимента установил в virtualbox росу с релизного образа про который говорил выше. Попытка
обновиться привела к другой ошибке. Пакет systemd-243 не смог обновиться и не помогла ни команда
sudo urpmi --replacepkgs systemd-243, ни его удаление. Там было что-то про отсутствие исходников ядра
в каком-то каталоге, в общем — не важно. Далее я просто попытался провести синхронизацию пакетов в системе
к тому состоянию, что в репозиториях. Мне было предложено скачать без малого 3ГБ пакетов, я согласился и
через некоторое время она была успешно произведена. Потом и попытка установить wine прошла успешно.

Пример 2

Установка calibre

Обновляем источники. sudo urpmi.update -a --downloader wget --wget-options '-c -t 0'

Загружаем calibre и все требуемые зависимости. sudo urpmi --downloader wget --wget-options '-c -t 0' calibre --no-install

Screenshot 18.png

Тестируем установку. sudo urpmi calibre --test

Screenshot 19.png

Устанавливаем. sudo urpmi calibre

Загрузка прочих файлов из интернета

Для загрузки используем программу wget с параметрами -c -t 0 -T 60

Пример:
wget -c -t 0 -T 60 http://mirror.rosalab.ru/rosa/rosa2016.1/iso/ROSA.Fresh.R11/ROSA.FRESH.PLASMA5.R11.x86_64.uefi.iso

Если загрузка прервалась, запускаем команду снова. Загрузка файла будет начата с того места, на котором остановилась.

Screenshot 15.png

Иногда может случиться так, что доступ в интернет есть, но загрузка файла остановилась
и программа не пытается ее продолжить. Жмем ctrl+c и снова запускаем скачивание.

Нередко wget присваивает файлу в качестве имени часть ссылки. В этом случае нужно добавлять к вышеуказанным
параметрам --content-disposition. wget -c -t 0 -T 60 --content-disposition ссылка. Но и он в некоторых ситуациях
не помогает. Тогда придется вручную присваивать нужное название после загрузки, либо используя параметр -O.
wget -c -t 0 -T 60 -O 'Имя файла.расширение' ссылка


Справка по используемым командам

Обновление системы

sudo urpmi --auto-update --downloader wget --wget-options '-c -t 0' --no-install
sudo urpmi --auto-select --test
sudo urpmi.update -a --downloader wget --wget-options '-c -t 0'

sudo  — позволяет разрешенному пользователю выполнять команду как суперпользователь
urpmi — загружает и устанавливает rpm пакеты
      --auto-update  — обновляет источники пакетов, а затем выбирает какие пакеты могут быть обновлены
      --downloader   — позволяет выбрать желаемую программу для загрузки пакетов. Мы будем использовать wget
                       Хотя она, вроде как, установлена для urpmi программой для загрузки по умолчанию все-таки
                       лучше перестраховаться
      --wget-options — устанавливает дополнительные опции для wget
          -c  — возобновление загрузки файла. Используется если загрузка файла была прервана
          -t  — устанавливает количество попыток скачать пакет. 0 - бесконечное
      --no-install   — не устанавливать пакеты
      --auto-select  — выбирает какие пакеты могут быть обновлены без обновления источников
      --test         — тестирует установку пакетов. Пакеты не устанавливаются, в системе ничего изменяется
urpmi.update — обновляет источники пакетов
      -a — обновить все источники

man sudo
man urpmi
man urpmi.update

Загрузка прочих файлов из интернета

wget — программа для загрузки файлов из интернета
    -c — возобновление загрузки файла. Используется если загрузка файла была прервана
    -t — устанавливает количество попыток скачать пакет. 0 - бесконечное
    -T — устанавливает время ожидания в секундах. Если сервер перестал отвечать, то по истечении
         установленного времени wget попытается к нему переподключиться
    -O — сохранить файл с указанным именем

man wget