LINUX.ORG.RU

Нужно что-то вроде fakechroot


0

0

Добрый день. Может кто-то знает - надо такую утилитку типа fakechroot, но чтобы в указанную директорию складывались только созданные и изменённые файлы, а чтение и запуск программ работал бы как обычно (т.е. в основной фс).
Допустим, утилитка называется fakewrite. Тогда можно юзать например так:

---
fakeroot fakewrite --log /tmp/fake.log /tmp/fake
adduser timon
bad-program-timon -u timon
rm /etc/shadow
exit
---

И после этого имеем /tmp/fake/etc/passwd -- точную копию /etc/passwd но с добавленным юзером. И также имеем любые файлы в /tmp/fake которые плохая программа попыталась установить в систему или изменить. А в файле /tmp/fake.log -- список файлов, которые программа попыталась удалить (и /etc/shadow).

Иметь такую штуку было бы очень удобно - не надо долго выискивать какие файлы надо скопировать в чрут. И продвинутым пользователем быть не надо - запустил и всё увидел.
Ещё такая утилитка была бы удобна для сборки программ, которые не поддерживают переменные prefix и DESTDIR в мэйкфайле (если он вообще существует).


Вобщем вот такая штука нужна. Может есть что-то такое в природе или кого-нибудь не затруднит её написать (или пропатчить fakechroot на эту тему)?

anonymous
Ответ на: комментарий от anonymous

Похоже, но не оно. Подмонтировать корень как 'ro' у меня не получилось (наверное из-за того, что в этом случае получится вложенность). К тому же это решение сложно для новичка и требует рутовых привелегий.

Короче на поток эту штуку поставить не получится, к сожалению :(

anonymous
()
Ответ на: комментарий от sda00

Нет, у фэйкрута другие задачи. Попытка перезаписать из-под него например файл /etc/passwd приведёт к ошибке permission denied. А мне хочется ещё и посмотреть - как именно этот файл будет перезаписан.

anonymous
()
Ответ на: комментарий от anonymous

>> Попытка перезаписать из-под него например файл /etc/passwd приведёт к ошибке permission denied.

что в общем-то и правильно. а вы ожидаете что? эскалации привилегий? нужен доступ к /etc/passwd, /etc/shadow - так и запускайте fakeroot из под uid-а, который может к этим файлам "дотянуться" (sudo настройте). а потом fakeroot вам и предоставит эмуль / в любом каталоге с правами записи для процесса, его запустившего.

sda00 ★★★
()
Ответ на: комментарий от sda00

сорри, туплю страшно. понял, что вы хотите сделать. это можно реализовать при помощи временных рэперов и чего-то вроде chroot/jail. я делал chroot окружение (если с рэперами было возиться лень). это занимает какое-то время, но потом окупается ксли активно пользовать.

sda00 ★★★
()

cowdancer не подойдет? Не на 100% то, что нужно, но...

> cowdancer allows copy-on-write file access. You can copy a full tree using hard links, and cowdancer will create a new copy when you need to write to a file. It's completely implemented in userland, and should run on most Linux filesystems.

http://freshmeat.net/projects/cowdancer/

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от sda00

Ну с чрутом всё понятно, просто хочется чего-то совсем простого даже в случае единичного использования. К тому же, даже в чруте придётся выискивать потом то, что сделала программа.

Основную область применения этой штуки я планирую для сборок пакетов скриптом makepkg из арчлинукса. Этот метод сборки мне нравится своей простотой. А именно - достаточно уметь устанавливать программу из исходников; и если ты это умеешь, значит ты умеешь делать пакеты.

А единственное узкое место в makepkg, это когда Makefile программы не поддерживает переменную DESTDIR (или prefix). Т.е. надо патчить мэйкфайл, а это не все умеют. И вот от этого недостатка обычный chroot (да и fakechroot тоже) не спасает.

Собственно, знакомство с утилитами fakeroot и fakechroot и натолкнуло меня на мысль, что можно ведь наверное ещё и такой "фэйк" сделать...

PS: а что это за временные рэперы? Где про них почитать можно?

anonymous
()
Ответ на: комментарий от anonymous

>>PS: а что это за временные рэперы? Где про них почитать можно?

основная идея (вы сами всё поймёте):

1) > touch /path/timestamp_1 (создаем файл нулевой длины, начальный рэпер)
2) возимся в системе
3) > touch /path/timestamp_2 (второй рэпер)
4) > find / -newer /path/timestamp_1 ! -newer \
/path/timestamp_2 > /path/files.changed
это прошерстит / и выкинет список изменившихся файлов в /path/files.changed

sda00 ★★★
()

Если я правильно понял, то подойдёт installwatch. Старую версию можно найти в гугле как отдельный пакет, новую --- выковырять из пакета checkinstall (в последнем случае есть дополнительные фичи, но не исключено, что они завязаны на сам checkinstall --- я работал только с первой). Она перегружает вызовы, изменяющие файлы, и при необходимости складывает старые файлы в указанную директорию (т.е. принцип несколько иной --- перемещаются старые файлы, а не новые). Использовать очень просто: достаточно сделать export LD_PRELOAD=installwatch.so, предварительно выставив переменные окружения, указывающие, куда складывать файлы и лог.

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

Jini ★★
()
Ответ на: комментарий от Jini

Спасибо. installwatch действительно наиболее близко к тому что нужно. Я скачал последнюю версию 0.6.3 отсюда:
http://asic-linux.com.mx/~izto/checkinstall/installwatch.html

Но он, кажется, никуда не копирует старые версии файлов, а только ведёт лог. В добавок, некоторые команды (например ls или mkdir) выдают ошибку сегментирования :(

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

Если это предложение помощи, то я бы не отказался :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.