Делаем полностью работоспособный apt-get
Для начала все папки и файла для apt-get должны быть созданы по этой инструкции.
При установке любого пакета с помощью apt-get выходит ошибка о том, что невозможно установить libc6. Я изучил скрипт предустановки libc6 и оказалось что библиотека не ставится из-за того, что путь /lib64 является символической ссылкой на /mnt/apps/lib.
Сначала я хотел сделать новый раздел на диске который будет содержать корневую директорию, но без потери данных это оказалось не возможно, т.к. используется файловая система xfs которую нельзя уменьшить.
Второй вариант - сделать корневую систему на флешке и изменить скрипты initrd. Не стал пока этими заниматься.
Остановился на третьем варианте: монтирование папки в папку.
(все описанное легче делать через MC)
1. Для начала создавим папку которая будет содержать часть нашего корневого раздела: /mnt/system/newroot
2. Создадим в ней папку с нашими библиотеками: /mnt/system/newroot/lib64
3. Скопируем все файлы из /lib64 в /mnt/system/newroot/lib64
4. Теперь нам необходимо избавится от симовлической ссылки, для этого удаляем ссылку /lib64 и создаем вместо нее директорию /lib64
5. Монтируем папку в папку:
# mount --bind /mnt/system/newroot/lib64 /lib64
Теперь libc6 ставится но возникают ошибки связанные с отсутствием свободного места в корневом разделе (он всего 50Мб). Проблема решается тем же монтированием папок:
6. Создаем папки:
/mnt/system/newroot/bin
/mnt/system/newroot/sbin
/mnt/system/newroot/usr
7. Копируем в эти папки файлы из следующих директорий соответственно:
/bin
/sbin
/usr
8. Монтируем папки:
mount --bind /mnt/system/newroot/bin /bin
mount --bind /mnt/system/newroot/sbin /sbin
mount --bind /mnt/system/newroot/lib64 /lib
mount --bind /mnt/system/newroot/usr /usr
У меня почемуто находились не все пакеты со стандартным репозиторием и поэтому я добавил в /etc/apt/sources.list:
deb http://ftp.ru.debian.org/debian stable main contib non-free
После этого у меня стали ставится любые пакеты без ошибок. (компилятор gcc который позволит собирать для устройства практически любые opensource программы, perl и д.р.)
Помните, после перегрузки устройства все папки станут стандартными и необходимо будет заново их примонтировать. Можно написать скрипт и монтировать через автозагруку, но тогда нужно следить за порядком автозагрузки служб, которые вы поставили через apt-get.
Либо можно прописать новые папки в initrd и тогда монтирование будет происходить до автозагрузки служб.
ВАЖНО!!! Часть пакетов уже установлена на устройстве, но т.к. производитель удалил файл с установленными пакетами, то все пакеты будут ставится заново. внимательно смотрите выдаваемые запросы. На вопросы о замене конфигурационных файлов отвечайте N.
У меня после установки какого-то стандартного пакета перестала работать команда shutdown -r now. Что то прописалось в /etc, пока разбираюсь
UPDATE:
В процессе разбирательства выяснилось что можно перегружаться командой: reboot -f.
Так же после некоторых действий пришлось востанавливать config образ (директория /etc), после чего shutdown заработал.
Как бонус всех вышеописанных действий вы получаете папку usr доступную для изменений, а это значит не нужно монтировать apps в режиме записи для включения например транскодирования.
Не ставиться libc6 вываливается на ошибке
ОтветитьУдалитьE: Internal Error, Could not perform immediate configuration (2) on libc6
в корне папка с lib64 и примонтированым в неё каталогом /mnt/system/newroot/lib64