Поскажите плиз

Jun 17, 2013 11:24

Есть вот такая строчка в скрипте, собственно создает cpio архив для модификации initrd:
find /opt/initrd/modify/ | cpio -H newc -o > /opt/initrd/initrd.cpioВопрос собственно в том, что пути в этом архиве оказываются абсолютными, например /opt/initrd/modify/bin/sh. А должно быть /bin/sh, мануал по cpio до дырок зачитал и все равно въехать не могу ( Read more... )

cpio, linux

Leave a comment

Comments 16

dil June 17 2013, 06:55:53 UTC
cpio тут ни при чём, в него какие пути скормили, такие он в архив и складывает, а find в таком варианте выдаёт полные пути. Можно вырезать ненужную часть маршрута, пропуская выдачу find через sed или cut, но тогда cpio не сможет найти эти файлы при создании архива.
Так что ваше решение вполне логично, чего ж в нём некрасивого?

Альтернативный вариант - использовать опцию --no-absolute-filenames при разворачивании архива, но она всего лишь отрежет ведущий /, и развернёт файлы с именами opt/initrd/modify/* в текущую директорию.

Reply

acisi June 17 2013, 07:51:46 UTC
Вот в том и беда, что разворачивает initrd уже ядро, я там особо не причем получаюсь. Как я реализовал получаются прыжки по каталогам и приходится восстанавливать каталог из которого я скрипт запускал. Не очень удобно получается при отладке.

Reply

dil June 17 2013, 09:11:22 UTC
Ну это.. Задачу надо чётче формулировать, а то получается "Мама, а как пишется слово аборт?" ;)
Вы что ли собираете вручную initrd'шный образ из кусков, лежащих в разных местах?

Reply

acisi June 17 2013, 10:01:41 UTC
А как вы догадались? :) mkinitrd генерит не то, что я хочу. Экспериментируем ....

Reply


kvazimoda24 June 17 2013, 06:55:53 UTC
А скажите мне, пожалуйста, как cpio должен понимать где надо обрезать имя файла? Т.е. где заканчивается абсолютный путь и начинается относительный? Команда find выдаёт абсолютные пути cpio, иначе cpio не найдёт файлов. Так что, кроме как перейти в каталог, решения быть не может.

Reply

acisi June 17 2013, 07:53:04 UTC
Очень жаль. Придется сохранять текущий каталог из которого стартовал скрипт и по завершении перемещаться обратно.

Reply

self_perfection June 17 2013, 08:02:58 UTC
Не нужно ничего сохранять, shell это делает за вас.
Сначала
cd /opt/initrd/modify/
когда нужно вернуться
cd -
что фактически выполнит
cd $OLDPWD

Кроме того, если вы хотите восстанавливать текущую директорию, чтобы не изменился $PWD в пользовательском шелле, из которого был вызван скрипт, то этого вообще делать не нужно, скрипт на текущую директорию вызвавшего его шелла влияния не имеет.

Reply

acisi June 17 2013, 08:08:35 UTC
О! Спасибо! Опробую.

Reply


andy_shev June 17 2013, 17:32:00 UTC
Я не совсем понимаю, зачем Вам initrd трогать?
Впрочем, посмотрите исходники buildroot, может поможет.

Reply


Leave a comment

Up