У Вас есть несколько опций:
переустановите и libffi и пакеты ConsoleKit (обновите свою копию репозитория сначала, если у Вас есть локальный клон).
удаление ConsoleKit - строго говоря это не необходимо (хотя это обеспечивает некоторый уровень пользовательского комфорта и дружелюбия).
символьная ссылка libffi.so.5
кому: libffi.so.6
- грязный взлом, который мог бы работать, но также и может доставить много неприятностей, даже фатальных.
Можно также хотеть считать переключение на прокручивающийся выпуск версий - slackware-текущим.
Если в используемой вами программе нет встроенной возможности, то для наложения новой информации каким-то образом на базовый файл, вы должны разрешить это на уровне файловой системы, прозрачно для приложения, использующего этот файл. Из-за вашего требования к пространству системы управления ревизиями будет недостаточно, хотя она предоставляет вам несколько версий.
Одна вещь, которую вы можете исследовать, это хранить файлы в файловой системе Btrfs и иметь оригиналы в одном "оригинальном" снимке, а обновленные версии - в виде, основанном на этом снимке. Это должно хорошо работать как для тегов ID3v1 (поскольку они являются концом файла), так и для тех файлов, которые имеют теги ID3v2¹, при условии, что у них достаточно зарезервированного места для изменений и не требуется перезапись MP3-файла. Таким образом, только фактические блоки, измененные для файла, занимают дополнительное место на диске.
При добавлении дополнительного файла в оригиналы необходимо сделать явный cp --reflink src dst
для всех файлов, добавленных на более позднем этапе. После этого ваши загрузки будут работать с оригиналами и вашим редактором id3 (например, picard) и вашим музыкальным проигрывателем в производном представлении. Неизмененные (или еще не измененные) файлы в этом виде будут выглядеть точно так же, как и в оригинале.
Пример (начиная с тома Btrfs на /данные0
и файла test.mp3
в /tmp
):
/data0$ btrfs subvolume create /data0/mp3org
Create subvolume '/data0/mp3org'
/data0$ cp /tmp/test.mp3 mp3org/
/data0$ btrfs subvolume snapshot /data0/mp3org/ /data0/id3update
Create a snapshot of '/data0/mp3org/' in '/data0/id3update'
Файл test. mp3
теперь доступен в обоих каталогах (mp3org
и id3update
):
/data0$ ls -l /data0/mp3org
total 7600
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:21 test.mp3
/data0$ ls -l /data0/id3update/
total 7600
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:21 test.mp3
Измените файл на снимке:
/data0$ id3v2 -c "This is a change" id3update/test.mp3
/data0$ ls -l /data0/mp3org
total 7600
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:21 test.mp3
/data0$ ls -l /data0/id3update/
total 7608
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:24 test.mp3
Размер файла не изменился, но изменилось содержимое второго. Это связано с тем, что комментарий поместился в зарезервированное место для id3v2 в оригинальном файле.
/data0$ grep -F "is a change" mp3org/* id3update/*
Binary file id3update/test.mp3 matches
Скопируйте другой файл в оригинальном подтоме, он не отображается в id3update
:
/data0$ cp /tmp/test.mp3 mp3org/abc.mp3
/data0$ ls -l mp3org/ id3update/
id3update/:
total 7600
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:24 test.mp3
mp3org/:
total 15200
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:28 abc.mp3
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:21 test.mp3
Сделайте копию явного отражения:
/data0$ cp --reflink mp3org/abc.mp3 id3update/
/data0$ ls -l mp3org/ id3update/
id3update/:
total 15200
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:29 abc.mp3
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:24 test.mp3
mp3org/:
total 15200
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:28 abc.mp3
-rw-rw-r-- 1 avanderneut users 7781043 Oct 25 15:21 test.mp3
И измените новый файл:
/data0$ id3v2 -c "another file change" id3update/abc.mp3
/data0$ grep -F change mp3org/* id3update/*
Binary file id3update/abc.mp3 matches
Binary file id3update/test.mp3 matches
Если mp3org
заполняется автоматически, вы можете сохранить id3update
в актуальном состоянии, регулярно выполняя скрипт, который делает cp --reflink src dst
, если назначение еще не существует.
¹, которые чаще всего находятся в начале файла
Использование системы управления версиями, такая как GIT, вы можете «зарегистрироваться» или «Commit» любое количество версий вашего файла. GIT, вероятно, является одной из самых простых систем управления версией, с которыми можно снять, потому что он не требует использования отдельного сервера; Вся работа может быть сделана на вашей местной машине, и в Интернете есть много учебной информации. Есть также различные графические передние концы для него. GIT будет хранить разные версии файлов внутри в качестве сжатой версии исходного файла и различий между версиями. В рамках процесса коммита вы предоставляете сообщение, которое кратко описывает состояние преданных файлов, а затем вы можете просматривать доступные версии и «проверить», с какой версией, с которой вы хотите работать.
Для нахождения разницы есть команда diff
- сравниваем файлы построчно. Вы можете сохранить различия в diff-файле
и в любое время применить его с помощью patch
- применить diff-файл к оригиналу.
Но в любом случае нужно сначала сделать второй файл для внесения изменений (его можно удалить после получения diff-файла).
Если diff
не может работать с бинарными файлами даже с параметром --text
, вы можете свободно использовать bsdiff
или, возможно, rdiff
(спасибо Anko за комментарий).