<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=25000&amp;type=atom" />
	<updated>2012-11-04T19:27:39Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=25000</id>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307641#p307641" />
			<content type="html"><![CDATA[<p>Итак, как и обещал, для истории и Гугла опишу всё, что сделал, надеюсь, что это кому-то окажется полезным. Всё описанное производится в ОС Ubuntu 12.10 x64.<br />Допустим, у нас имеется файловая система Linux, скомпилированная для не-x86 устройства и распакованная в каталог /camfs/fs, в которую необходимо внести изменения и заархивировать обратно в архив cpio. Чтобы сохранить сжатие &quot;от корня&quot;, я сделал следующее: <br /></p><ul><li><p>прежде всего, я получил список файлов, которые необходимо будет добавить в cpio, и сохранил его в текстовый файл: find . &gt; filelist, затем вручную убрал в полученном текстовом списке у имён всех файлов ведущую точку, так, чтобы список файлов выглядел как будто сделан &quot;от корня&quot; этой файловой системы;</p></li><li><p>в каталог /camfs/fs/bin я скопировал файл bash из моей системы, создал каталог /camfs/fs/toolchain и скопировал туда файлы cpio (сам архиватор), cat (нужен для&nbsp; работы cpio) и ls (для своего&nbsp; удобства);</p></li><li><p>затем (это тот момент, который я упустил из виду) я узнал, от каких библиотек зависят скопированные мной компоненты: ldd /bin/bash и ldd /bin/cpio. На моё счастье все они находились в /lib/x86_64-linux-gnu и в /lib64/ и вместо того, чтобы отыскивать и копировать их поштучно, я скопировал эти директории в собираемую мной файловую систему полностью;</p></li><li><p>теперь убеждаемся в наличии у скопированных bash и cpio прав на запуск, при необходимости даём его им: chmod +x /camfs/fs/bin/bash, chmod +x /camfs/fs/toolchain/cpio, chmod +x /camfs/fs/toolchain/cat;</p></li><li><p>всё готово к запуску chroot, для этого выполняем chroot /camfs/fs /bin/bash (разумеется с правами root), появляется новая командная строка;</p></li><li><p>теперь надо указать полученной системе, где искать архиватор (и, возможно, другие компоненты, если с ФС нужно будет сделать что-то еще): export PATH=/toolchain. Теперь убедиться в том, что корень изменился, можно командой ls;</p></li><li><p>и, наконец, выполняем cat /filelist | cpio --create --format=&#039;newc&#039; &gt; /image.cpio и получаем заветный файлик image.cpio, содержащий перепакованную ФС для нашего устройства. Выйти из консоли chroot можно командой exit.</p></li></ul><p>Большое спасибо всем, кто помог мне разобраться с chroot и cpio. Еще раз я убеждаюсь, что сила Open Source - в сообществе.</p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-04T19:27:39Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307641#p307641</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307617#p307617" />
			<content type="html"><![CDATA[<p>да, для этих целей есть статически собранный busybox, обычно распологается в /bin/bb, это относительно полноценный шелл с полным набором утилит в одном бинарнике...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2012-11-04T14:41:41Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307617#p307617</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307614#p307614" />
			<content type="html"><![CDATA[<p><strong>yars</strong>, <strong>bormant</strong>: ребят, спасибо вам большое, всё получилось! Посыпаю свою голову пеплом, но я забыл про зависимости! Не закрывайте пока тему пожалуйста, чуть позже я опишу всё, что делал, может кому пригодится.&nbsp; <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-04T14:33:54Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307614#p307614</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307611#p307611" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>evilslon пишет:</cite><blockquote><p>Подскажите, пожалуйста, где я делаю ошибку или что я делаю не так?</p></blockquote></div><p>Во-первых, кроме самого Bash&#039;a, нужны еще и его зависимости:<br /></p><div class="codebox"><pre><code># ldd $(which bash)
    linux-gate.so.1 (0xffffe000)
    libtermcap.so.2 =&gt; /lib/libtermcap.so.2 (0xb7713000)
    libdl.so.2 =&gt; /lib/libdl.so.2 (0xb770e000)
    libc.so.6 =&gt; /lib/libc.so.6 (0xb7589000)
    /lib/ld-linux.so.2 (0xb7734000)</code></pre></div><p>Во-вторых, после </p><div class="codebox"><pre><code>cp /bin/bash /camfs/fs/bin/bash</code></pre></div><p>нужно сделать </p><div class="codebox"><pre><code>chmod +x /camfs/fs/bin/bash
croot /camfs/fs /bin/bash</code></pre></div><p>Как-то так...</p>]]></content>
			<author>
				<name><![CDATA[yars]]></name>
				<uri>https://linuxforum.ru/profile.php?id=22799</uri>
			</author>
			<updated>2012-11-04T13:48:06Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307611#p307611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307605#p307605" />
			<content type="html"><![CDATA[<p>Не могу понять, как мне сделать chroot в директорию с этими файлами:</p><div class="codebox"><pre><code>root@Sergey-PC:/camfs/fs# chroot /camfs/fs /toolchain/bash
chroot: failed to run command `/toolchain/bash&#039;: No such file or directory
root@Sergey-PC:/camfs/fs# ls /camfs/fs/toolchain/
bash  cpio
root@Sergey-PC:/camfs/fs# </code></pre></div><p>Поскольку bash в этом устройстве отсутствует, я попробовал скопировать файл bash из моей системы в папку /bin этой файловой системы, и всё равно при попытке chroot выдается <br /></p><div class="codebox"><pre><code>chroot: failed to run command `/bin/bash&#039;: No such file or directory</code></pre></div><p>Подскажите, пожалуйста, где я делаю ошибку или что я делаю не так?</p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-04T13:00:13Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307605#p307605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307576#p307576" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>bormant пишет:</cite><blockquote><p>Готовите структуру, подлежащую упаковке, допустим в /newroot. <br />Дополнительно туда укладываете список подлежащих упаковке файлов, как он будет виден из /newroot, с указанием лидирующего /.<br />Создаёте в /newroot каталог, не подлежащий упаковке в архив, например, /newroot/toolchain, куда складываете бинарник cpio и всё, что ему нужно для исполнения (если собран статически, вам крупно повезло).<br />Выполняете <br /># chroot /newroot <br /># export PATH=/toolcahin<br /># cat /filelist | cpio --create --format=&#039;newc&#039; &gt; /image.cpio<br /># exit<br />Забираете пирожок: /newroot/image.cpio.</p></blockquote></div><p>Спасибо, вот что-то вроде этого мне и нужно! Как я понимаю, кроме cpio мне туда ещё нужно добавить и bash? Вечером попробую, отпишу сюда <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-04T07:15:19Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307576#p307576</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307570#p307570" />
			<content type="html"><![CDATA[<p>Поскольку тема в разделе &quot;Программирование&quot;, возможен и иной путь (возможно, даже менее трудоёмкий). <br />Берёте исходники cpio, добавляете в них опцию, например, --assume-root, добавляете код, принудительно дописывающий перед каждым именем файла в архиве &quot;/&quot; и убирающий стартовую &quot;.&quot; (или не убирающий, что даст свободу анализа, например, оставлять для &quot;./нечто&quot; относительный путь, а из &quot;нечто&quot; принудительно делать &quot;/нечто&quot;), собираете и используете безо всякой возни с chroot.</p>]]></content>
			<author>
				<name><![CDATA[bormant]]></name>
				<uri>https://linuxforum.ru/profile.php?id=732</uri>
			</author>
			<updated>2012-11-03T21:50:34Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307570#p307570</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307569#p307569" />
			<content type="html"><![CDATA[<p>Готовите структуру, подлежащую упаковке, допустим в /newroot. <br />Дополнительно туда укладываете список подлежащих упаковке файлов, как он будет виден из /newroot, с указанием лидирующего /.<br />Создаёте в /newroot каталог, не подлежащий упаковке в архив, например, /newroot/toolchain, куда складываете бинарник cpio и всё, что ему нужно для исполнения (если собран статически, вам крупно повезло).<br />Выполняете <br /># chroot /newroot <br /># export PATH=/toolcahin<br /># cat /filelist | cpio --create --format=&#039;newc&#039; &gt; /image.cpio<br /># exit<br />Забираете пирожок: /newroot/image.cpio.</p>]]></content>
			<author>
				<name><![CDATA[bormant]]></name>
				<uri>https://linuxforum.ru/profile.php?id=732</uri>
			</author>
			<updated>2012-11-03T21:41:22Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307569#p307569</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307568#p307568" />
			<content type="html"><![CDATA[<p>Оххх, только сильно не ругайтесь...<br />Вот смотрите, если я распакую архив new_image.cpio, полученный мной в ходе работы команды find . | cpio --create --format=&#039;newc&#039; &gt; /tmp/new_image.cpio находясь в этот момент в, скажем, каталоге /tmp , то содержимое архива ведь распакуется в каталог /tmp , а не в корень файловой системы? Всё дело в том, что исходный архив упакован именно так, если при его распаковке не указать cpio ключ --no-absolute-filenames , то архив распакуется в корень ФС, а не в текущую папку, вот и мне хотелось бы сделать также. Т.е. мне нужно сделать что-то вроде chroot, как я понимаю, но как? Может это, конечно, и не важно и зря я сам забиваю себе мозг глупостями...</p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-03T20:30:28Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307568#p307568</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307566#p307566" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>evilslon пишет:</cite><blockquote><p> Или может я что-то путаю?</p></blockquote></div><p>Путаете. По команде выше заархивируется текущий каталог, а перед этим текущим станет /path/to/root/of/work. Распаковываете свой архив куда-нибудь в /tmp/cpiotree, вносите изменения, выполняете<br /></p><div class="codebox"><pre><code>cd /tmp/cpiotree
find . | cpio --create --format=&#039;newc&#039; &gt; /tmp/new_image.cpio</code></pre></div><p>Получаете свеженький &quot;блинчик&quot; в /tmp/new_image.cpio. Дальше уже сами разберетесь.</p>]]></content>
			<author>
				<name><![CDATA[yars]]></name>
				<uri>https://linuxforum.ru/profile.php?id=22799</uri>
			</author>
			<updated>2012-11-03T19:53:05Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307566#p307566</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307564#p307564" />
			<content type="html"><![CDATA[<p>Большое спасибо Вам за ответ! Да, это почти то, что надо, но не совсем то, как я понимаю. Всё дело в том, что при этом способе упаковки создаётся не абсолютный путь к файлам, а относительный (т.е. например var/tmp, а надо /var/tmp). Или может я что-то путаю? Вот, нагуглил, <a href="http://forum.ubuntu.ru/index.php?PHPSESSID=trpu9dmhvksdbdjtlofdvqmp25&amp;topic=98257.0">здесь</a> человек задаёт аналогичный вопрос, но у него дистрибутив для x86, а у меня ФС от системы на основе mips-процессора.</p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-03T19:45:03Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307564#p307564</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307562#p307562" />
			<content type="html"><![CDATA[<p>Начать стоило с прочтения man cpio, тем более, что его язык вам не совсем незнаком. <br />Затем применить прочитанное на практике, что-то вроде<br /></p><div class="codebox"><pre><code>cd /path/to/root/of/work
find . | cpio --create --format=&#039;newc&#039; &gt; /tmp/new_image</code></pre></div><p>При необходимости пожать поддерживаемым компрессором.</p>]]></content>
			<author>
				<name><![CDATA[bormant]]></name>
				<uri>https://linuxforum.ru/profile.php?id=732</uri>
			</author>
			<updated>2012-11-03T19:17:52Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307562#p307562</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Прошу помощи по сжатию ФС устройства в формат CPIO...]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=307557#p307557" />
			<content type="html"><![CDATA[<p>Всем приятного времени суток! Не так давно я решил заняться интересным для меня (а, еще, возможно, и полезным для кого-то) делом: перевести интерфейс ip-камеры D-Link DCS-930 (не L) на русский язык, для чего я взял <a href="http://dose.0wnz.at/ipcams/">отсюда</a> скрипт и успешно распаковал файловую систему из прошивки камеры. Как видно из текста скрипта, ФС запакована в формат CPIO (file ../filename сообщает ASCII cpio archive (SVR4 with no CRC)). Перевод завершён, вычитан и протестирован, и теперь хочется собрать прошивку, однако изначально ФС упакована в cpio-архив с абсолютными путями. Мой вопрос: как мне упаковать эту ФС, распакованную в папку, с сохранением всех путей и прав (т.е. фактически перепаковать архив)? Как я понимаю, мне нужно сделать что-то вроде chroot в эту папку, но разве возможно сделать chroot в систему, скомпилированную для другой архитектуры? Подскажите, пожалуйста, в какую сторону мне копать? <br />В мире Linux я больше всё-таки пользователь, чем программист или админ, поэтому мне не остаётся ничего иного, кроме как просить помощи сообщества.</p>]]></content>
			<author>
				<name><![CDATA[evilslon]]></name>
				<uri>https://linuxforum.ru/profile.php?id=26365</uri>
			</author>
			<updated>2012-11-03T18:38:54Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=307557#p307557</id>
		</entry>
</feed>
