LINUX.ORG.RU
ФорумAdmin

tar: SELinux support is not available

 , ,


0

1

друзья! использую ArchLinux, в котором по умолчанию нет поддержки SElinux. Задача - имеем файл system.img (Андроид), который я хотел бы распаковать, отредактировать нужное, запаковать назад (erofs). Взял смонтировал файл system.img в loop, далее нужно скопировать все файлы из loop в созданный каталог, но с сохранением контекста SElinux. Делаю это командой sudo tar –selinux -cf - | sudo tar –selinux -xf - данная команда выдаёт ошибку о том, что tar не имеет поддержки SElinux. Умный человек остановился бы здесь, внимательно подумав. Я же используя инструкцию с АрчВики добавил в систему поддержку SElinux, поставив для для этого туеву хучу пакетов с aur-а и убив кучу времени. После добавления selinux в параметры ядра и перезагрузки системы я внезапно обнаружил что данная ошибка никуда не исчезла. Ну, как я уже писал выше - умный человек не делал бы такого, но поскольку я не очень умный то уж как есть. Почесав репу и почитав в интернет понял что в Арче tar собран без поддержки selinux так как его вообще нет в Арче по умолчанию, и мол надо пересобрать tar с включением этой поддержки.

Друзья, поэтому два вопроса, помогите пожалуйста.

  1. я не умею собирать пакеты из сорцов. Прошу, если есть инструкция на примере сборки какого нибудь пакета (не из aur, а который в оф.репозиториях) - пожалуйста дайте такую инструкцию или подскажите что надо сделать. О том что в арче есть ABS знаю, но это всё что я знаю. Умею набирать буквы в терминале последовательно и нажимать Энтер)))

  2. а прав ли я в том, что для сохранения контекста нужен tar? как вы уже догадались, с моими знаниями я не придумал бы ту команду с использованием tar, я нашёл её в интернет. И вот сейчас подумал, а может перенос файлов из loop в каталог с сохранением контекста можно было выполнить в каком нибудь файловом менеджере с поддержкой контекста selinux? но в каком? я об этом не знаю. Если есть такие файловые менеджеры подскажите пожалуйста, и кроме того для меня остаётся неясным вопрос. Если мне нужно всего лишь скопировать эти файлы, нужна ли в моей системе активированая SElinux или нет? я активировал, sestatus говорит enabled, но ведь скорее всего активировать нужно в том случае, если мне нужны защитные свойства этого модуля. Мне они не нужны, мне всего лишь нужно скопировать файлы, отредактировать их в каталоге и потом на основе этих файлов пересоздать img-образ в файловой системе erofs.

Перемещено hobbit из general

Не проверял, но подозреваю, что тебе не нужна поддержка SELinux для сохранения контекста. Вроде это просто xattrs в конечном счёте. Достаточно, чтобы атрибуты с нужным префиксом сохранялись при распаковке/упаковке.

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

в таком случае мне нужен либо FM с возможностью сохранения этих атрибутов, либо пересобрать tar с поддержкой selinux. Но к сожалению не знаю как сделать то и другое.

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

в таком случае мне нужен либо FM с возможностью сохранения этих атрибутов

cp/mv/rm/rsync и т.д.

либо пересобрать tar с поддержкой selinux

Перечитай внимательно мой комментарий, потом читай документацию tar (GNU или bsdtar — без разницы).

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

спасибо, но вот сейчас я понимаю что скорее всего мне вообще не нужно использовать tar и объясню почему (может ошибаюсь). Дело в том, что команду по упаковке архива и последующей распаковке из архива автор инструкции скорее всего сделал ради того,чтобы все действия вложить в одну команду. Вот она целиком:

(cd system && sudo tar –selinux -cf - .) | (cd system_new && sudo tar –selinux -xf -)

т.е. мы берём все файлы из каталога system (у меня по факту в нём смонтированы файлы как loop), архивируем их в архив с сохранением контекста всех файлов, и потом распаковываем содержимое только что созданного архива в новый каталог. Так вот, если я сейчас прав, то мне на самом деле не нужен никакой архив. Мне всего лишь надо скопировать файлы из каталога system в каталог system_new с сохранением аттрибутов selinux. Это ведь можно сделать в файловом менеджере, например mc либо thunar, верно? но тогда как указать файловому менеджеру чтобы сохранял контекст selinux?

P.S. дополню кое что. Если можно было использовать –xattrs при создании архива и извлечении, тогда зачем эта заморочка с указанием –selinux? я был сделал вывод, что –xattrs не сохранит этот контекст.

corelinux
() автор топика
Последнее исправление: corelinux (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

ты втираешь мне какую-то дичь

нет, скорее всего ты меня неправильно понял. Повторюсь, у меня задача состоит в том чтобы открыть system.img, изменить там один файл, создать новую файловую систему erofs и туда залить все файлы вместе с изменённым. Всё. Больше ничего не надо. Когда я попытался это сделать, tar отказался работать,мол не поддерживаю selinux. Ты предлагаешь использовать опцию –xattrs, она будет копировать контекст selinux или нет? я просто не знаю. Второй вариант - хотелось бы пересобрать tar с поддержкой selinux (это уже ради спортивного интереса)

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

открыть system.img, изменить там один файл, создать новую файловую систему erofs…

Тебе реально нужно создать новую ФС?..

Если только внести изменения, если размер не увеличивается, если ФС не «только чтение», то монтируешь, изменяешь, отмонтируешь. Не нужны ни tar, ни копирование, ни прочие домыслы.

Если будешь создавать новое, как минимум, у него будет другой УУИД, со всеми возможными последствиями.

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

tar не нужен. От рута: cp –preserve=all …

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

tar –selinux

tar –xattrs

cp –preserve=all

в чём разница? то что tar это архиватор а cp команда копирования я знаю. Но в чём разница (и есть ли она вообще) в количестве сохраняемых атрибутов?

corelinux
() автор топика
Последнее исправление: corelinux (всего исправлений: 2)
Ответ на: комментарий от andytux

Тебе реально нужно создать новую ФС?..Если только внести изменения, если размер не увеличивается, если ФС не «только чтение»

как раз «только чтение», это же erofs. Я не могу просто примонтировать, поменять содержимое файла и отмонтировать, мне приходится пересоздавать файловую систему. Кстати мой оригинальный system.img оказался намного меньше по размеру чем тот, что я создал командой mk.erofs но и пофиг,оно залилось как sparse и норм.

corelinux
() автор топика
Ответ на: комментарий от vbr

Запусти в докере образ RHEL или его производных.

поскольку про докер слышу достаточно часто последнее время, могли б Вы дать инструкцию как с ним работать? такую чтобы понял не умный человек вроде меня. Я хорошо умею набирать буквы на клавиатуре и нажимать Энтер, но слаб во многих других вопросах.

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

К сожалению докер это не такая тривиальная технология, чтобы её можно было сколько-нибудь исчерпывающе объяснить в форумном посте, поэтому всё же посоветую поискать какие-то полновесные руководства и выделить время на изучение и эксперименты. Технология действительно важная на сегодняшний день и освоить её стоит.

Если совсем вкратце (ну про установку писать уж не буду):

docker run --rm -it --name=rh registry.access.redhat.com/ubi10:latest

После короткого скачивания запустится контейнер с именем rh и образом от redhat 10. Всё, что будет сделано внутри - удалится по нажатию Ctrl+D. Это всё изолированно от основной системы.

Можно вместо docker использовать podman, это альтернативная реализация тех же идей и в основном всё работает идентично.

Для передачи файла внутрь используется команда cp, в другой вкладке терминала пишем docker cp file.tar rh:/root/file.tar. После этого в контейнере появится файл /root/file.tar, с которым можно делать что угодно, в том числе используя tar от RHEL. После этого можно скопировать всё назад с помощью команды docker cp rh:/root/file.tar file.tar.

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

Если позволите, чуть дополню

  1. ключ –rm заставляет докер удалять контейнер после остановки вместе со всем, что не скопировано на хост. Отличный ключ, только так и использую, но для новичка я бы первые запуски обходился без него и удалял контейнер руками docker rm rh.

  2. можно смонтировать директорию с хоста в докер. Очень удобно, не надо ничего копировать на хост или в контейнер.

docker run --init --rm -it --name=rh -v "/host/dir/:/mnt/data" registry.access.redhat.com/ubi10:latest

и вот уже все, что создано в контейнере в папке /mnt/data не будет уничтожено вместе с контейнером и всегда будет доступно из хоста в папке /host/dir.

  1. ключ –init ничего функционально не делает, просто добавляет простейший init в контейнер, который гарантирует обработку сигналов. В большинстве контейнеров это улучшает отзывчивость на stop и прочие сигналы контейнеру из хоста и от демона докер.

4 конфиг максимально прозрачного докера.

 cat /etc/docker/daemon.json 
{
    "bridge": "none",
    "iptables": false,
    "log-driver": "journald",
    "data-root": "/mnt/data/docker" 
}

Не создавать бридж, не лезть в iptables, журналировть сразу в журнал хоста, все данные имиджей, контейнеров, томов хранить в /mnt/data/docker в /mnt/data монтируем отдельную шаоу и наслаждаемся непереполнением корня.

Если нужна сеть, использовать –net=host.

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

Мне что-то подсказывает, что если ФС с этого образа расшифровывается как Enhanced Read-only File System, то и менять в ней файлы нельзя. Я думаю что вы знакомы со SquashFS и понимаете что в него записывать тоже не подразумевается.

@rtxtxtrx ^

a1ba ★★★
()

Неужели для работы с образом erofs нужен tar?

Вот что говорит AI Google

To repack an EROFS image under Linux, you’ll need to use the mkfs.erofs tool and likely have the erofs-utils package installed. The general process involves first extracting the contents of the EROFS image, modifying those contents, and then using mkfs.erofs to recreate the image.

unpack-erofs.sh

https://gist.github.com/AndroPlus-org/5d8336fe51ab260764b0214e2784c74e

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 4)