|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 13 May 2007 13:14:45 To : Victor Sudakov Subject : Re: вопрос про tar -------------------------------------------------------------------------------- 13 май 2007, воскресенье, в 06:41 KRAST, Victor Sudakov написал(а): VS>> Как сказать tar, чтобы не умничал и сохранял/восстанавливал owner и VS>> group по цифровым uid и gid, а не по именам? VS>> Или как хотя бы посмотреть в выводе 'tar t', какой же numeric uid был VS>> у файла? >> В формате tar сохраняются именно имена, а не цифры. VS> Hе всё так просто. Если на системе, где tar разворачивается, в VS> /etc/passwd не нашлось хранящихся в архиве имён, то tar достаёт из VS> какого-то загашника цифры. Заглянуть бы в этот загашник. Да, был не прав. Хранятся и имена, и цифры. RTFS по libarchive показывает, что он безусловно ищет uid по имени и только если имени такого нет (getpwnam возвращает NULL), использует сохраненный в архиве uid. То же касательно групп. tar управлять этим поведением libarchive не имеет возможности. В комментарии еще есть такое: TODO: Provide an API for clients to override these VS> А какой архиватор в базовой системе (не dump) умеет хранить и VS> извлекать именно цифры? Hу поправить libarchive и tar, чтобы опционально оторвать трансляцию несложно, ломать не строить. Держи: ftp://www.kuzbass.ru/pub/freebsd/patches/tar.tgz Эти патчи добавляют к bsdtar опцию -i, которая заставляет его при восстановлении владельца файлов во время распаковки использовать uid/gid, сохраненные в архиве, вместо поведения по умолчанию, когда по сохраненным имени владельца и группы вычисляются uid/gid пользователя в системе, на которой разворачивается архив. libarchive.diff реализует эту функциональность, добавляя в APШ флаг ARCHIVE_EXTRACT_UGID. tar.diff включает использование ARCHIVE_EXTRACT_UGID при задании опции -i. Makefile собирает правленные libarchive и линкует правленный tar с libarchive статически (с другими библиотеками динамически), не трогая системный libarchive. Требует установленных в /usr/src исходников tar и libarchive (штатно). Сборка: make clean all Установка правленного tar в /usr/local/bin/tar: make install Eugene P.S. PR писать не буду, мне эта функциональность не нужна. Если хочешь - пиши. --- slrn/0.9.8.0 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2609389c2a8dd.html, оценка из 5, голосов 10
|