Как было сказано в комментариях, единственный надежный способ создать единый двоичный файл, который будет работать в разных выпусках Debian (или любом дистрибутиве Linux), - это построить его статически. Это хорошо поддерживается в Debian и других местах, в том числе с помощью pkg-config
и т. Д. Статические двоичные файлы могут работать десятилетиями; интерфейс пользовательского пространства ядра поддерживается обратно совместимым образом (иногда он ломается, но это считается ошибкой и обычно исправляется быстро). Вы найдете случаи, когда статические двоичные файлы перестают работать, но это обычно связано либо с обработкой libnss
(это динамично даже в статических двоичных файлах), либо с изменениями в ожиданиях X-сервера (это происходит с старым Linux games ), или ядра дистрибутивов, отказывающиеся от поддержки функций, которые считаются устаревшими ( например, звуковой интерфейс OSS в ядрах Ubuntu).
(Другой подход - отправить все ваши зависимые библиотеки и использовать rpath
или сценарий оболочки для правильной настройки; это то, что делает Steam, и многие игры для Linux, не относящиеся к Steam, тоже делают это, но это менее надежно, чем статическое связывание, и его труднее исправить, когда что-то пойдет не так.)
Ваш динамический двоичный файл, созданный на Debian 6, работает на Debian 8, потому что прямые зависимости двоичного файла все еще доступны в вашей установке Debian 8; это чистая удача, и на нее нельзя положиться. Например, ваш двоичный файл связан с libssl.so.0.9.8
; это все еще работает для вас в Debian 8, потому что у вас все еще есть старая libssl0.9.8
(обратите внимание, что ссылка удовлетворяет /usr/lib/i686/cmov/libssl.so.0.9.8
, который не использует многоархивный путь и предположительно исходит из старый пакет). Создавая Debian 8 без старых пакетов, вместо этого вы получите ссылку на libssl.so.1.0.0
, а она недоступна в Debian 6. (Это та ситуация, в которой вы бы хотели в итоге вы получите только что установленную систему Debian 8.)
Ваш двоичный файл, созданный для Debian 8, не работает в Debian 6, и это совершенно нормально: двоичная совместимость только по возрастанию, а не по убыванию. Это означает, что если вы создаете двоичный файл в Debian 6, а он по-прежнему находит свои библиотеки в Debian 8, он должен работать нормально; но бинарный файл, связанный с Debian 8, может ожидать символов в библиотеках, которые недоступны в Debian 6, без изменения названий библиотек. Ошибка, связанная с g_thread_create
, возникает из-за того, что вы построили Debian 8, где libglib-2.0.so.0
имеет этот символ, но Debian 6 libglib-2.0.so. 0
нет. Если вы создали пакет, содержащий ваш двоичный файл, зависимости пакета будут правильно определять это (вы получите зависимость как минимум от libglib2.0-0 (> = 2.31.8)
; Debian 6 имеет только версию 2.24.2).
Лучший способ защитить вашу установку в будущем - это создать пакет с исходным кодом с зависимостями, которые могут быть удовлетворены в Debian 6 и 8; тогда вы можете легко собрать правильные двоичные пакеты для Debian 6, 7, 8, 9 ...Это несколько сложнее, чем создание статического двоичного файла, по крайней мере, в первые несколько раз, когда вы это делаете, но я думаю, что в долгосрочной перспективе это того стоит, если вы планируете выполнять такие типы обновлений в будущем. Обычно для этого используется pbuilder
, он поддерживает сборку для различных дистрибутивов ( sbuild
также может это делать). Расширение приведенных мной инструкций для Debian 6 должно быть относительно простым (продублируйте обработку STABLE_CODENAME
для OLDOLDSTABLE_CODENAME
и используйте архивные репозитории ).
Что-то вроде этого поможет?
pushd /home/iris/filesToExtract
for i in $(</home/iris/hdpvr.txt); do find. -mindepth 1 -maxdepth 1 -type f -name "*_$i.xml" -print0 | xargs -r -0 -i mv "{}" /home/iris/xmlfiles; done
find. -mindepth 1 -maxdepth 1 -type f -name "*.xml" -delete
popd
Вы также можете сделать это жестоким способом с mv, но он выдаст ошибки, если файл не будет найден
pushd /home/iris/filesToExtract
for i in $(</home/iris/hdpvr.txt); do mv "*_$i.xml" /home/iris/xmlfiles; done
find. -mindepth 1 -maxdepth 1 -type f -name "*.xml" -delete
popd
Еще одно решение, спасибо glenn jackmann !
#!/bin/bash
# folder where the xml files are stored
xmldir=/home/iris/filesToExtract
# xml backup folder
backupdir=/home/iris/xmlfiles
while read -r line; do
mv -t "$backupdir" *_*_${line}.xml 2>/dev/null
done <"$xmldir/hdpvr.txt"
rm -i *.xml
Шаблон *_*_${line}.xml
используется для поиска файлов в каталоге.
Замените rm -i *.xml
на rm *.xml
, если вы хотите немедленно удалить оставшиеся XML-файлы.