Как управлять несколькими зависимостями пакетов с помощью checkinstall?

У меня есть пакет, который я собираю, используя checkinstall какое-то время, и я хотел автоматизировать это (передать значения через командную строку вместо ввода выделения, вставки значения и т. д.)

Я не уверен, если это ошибка checkinstall, или нет, но как я могу включить несколько пакетов через командную строку --requires вариант. Кажется, если я включу минимальную версию пакета (например, --requires="libvte9 (>= 0.28.2)") или несколько пакетов одновременно (например, --requires "libvte9, libc6")

Кто-нибудь имел лучший успех с аргументами командной строки для нескольких пакетов? Я делаю что-то не так, или это ошибка.

Примечание. Если я запускаю сценарий и выбираю параметр require (10), и вставляю всю мою строку с несколькими пакетами и минимальными версиями (такими как libvte9 (>= 0.28.2), libc6 (>= 2.13), он работает нормально, просто кажется, что в командной строке возникают проблемы. Это также относится к созданию пакета Debian с использованием -D вариант.

4 ответа

Решение

checkinstall использует , разделить несколько пакетов. Вот и все, запятая, без пробелов вокруг.

Прочитав ответ Алекса-Даниэля Якименко-А., Реалумпи, и сделав несколько тестов на примере из реальной жизни, вы должны сделать следующее:

  1. использование , (запятая) без пробелов для разделения необходимых пакетов;
  2. побег ( а также ) скобки при указании версии пакета;
  3. побег > (больший знак) при указании версии пакета;

пример

make && sudo -k checkinstall \
    --pkgsource="https://github.com/raboof/nethogs/" \
    --pkglicense="GPL2" \
    --deldesc=no \
    --nodoc \
    --maintainer="$USER\\<$USER@$HOSTNAME\\>" \
    --pkgarch=$(dpkg \
    --print-architecture) \
    --pkgversion="0.8.1" \
    --pkgrelease="SNAPSHOT" \
    --pkgname=nethogs \
    --requires="libc6 \(\>= 2.4\),libgcc1 \(\>= 1:4.1.1\),libncurses5 \(\>= 5.5-5~\),libpcap0.8 \(\>= 0.9.8\),libstdc++6 \(\>= 4.1.1\),libtinfo5" \
    make install

Выход

*****************************************
**** Debian package creation selected ***
*****************************************

This package will be built according to these values:

0 -  Maintainer: [ elopez<elopez@> ]
1 -  Summary: [ Net top tool grouping bandwidth per process ]
2 -  Name:    [ nethogs ]
3 -  Version: [ 0.8.1 ]
4 -  Release: [ SNAPSHOT ]
5 -  License: [ GPL2 ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ https://github.com/raboof/nethogs/ ]
9 -  Alternate source location: [  ]
10 - Requires: [ libc6 (>= 2.4),libgcc1 (>= 1:4.1.1),libncurses5 (>= 5.5-5~),libpcap0.8 (>= 0.9.8),libstdc++6 (>= 4.1.1),libtinfo5 ]
11 - Provides: [ nethogs ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Вы должны избежать скобок, например, --requires "package \(= 1.0\)"

В этом ответе рассказывается о том, как правильно отформатировать пунктуацию в скрипте оболочки, чтобы получить несколько зависимостей пакетов для checkinstall для работы.

PAK_USER='. , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ |'
PAK_NEEDS='. , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ |'
PAK_NEEDS=$(echo "$PAK_NEEDS" | perl -pe 's/([[:punct:]])/\\\1/g')

0 -  Maintainer: [ . , ? ! : + - ^ _ { } = $ % @ [ ] / ]
1 -  Summary: [ This is a punctuation escape test. ]
10 - Requires: [ . , ? ! : + - ^ _ { } = $ % @ [ ] / ; # & * ~ ( ) < > \ | ]

Те, которые нуждаются в экранировании, являются операторами оболочки ; # & * ~ ( ) < > \ | Некоторые вернут значение * ~ прекратить линию ; # или уничтожить все ( ) < > | & в то время как \ исчезает, так как это спасательный персонаж.

Регулярное выражение perl -pe 's/([[:punct:]])/\\\1/g' избегает всех знаков препинания, которые являются излишними, но работают довольно хорошо. Одиночные и двойные кавычки уже проблематичны, наряду с $, который будет расширяться, если он не заключен в одинарные кавычки.

Если вы не хотите думать о побеге, используйте регулярное выражение и будьте осторожны с ' " $,

PAK_NEEDS="libasound2 (>= 1.0.16), libavcodec57 (>= 7:3.4.2) | libavcodec-extra57 (>= 7:3.4.2), libavformat57 (>= 7:3.4.2), libavutil55 (>= 7:3.4.2), libboost-filesystem1.65.1, libboost-system1.65.1, libc6 (>= 2.27), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgl1, libglu1-mesa | libglu1, libmad0 (>= 0.15.1b-3), libsdl2-2.0-0 (>= 2.0.8), libsdl2-image-2.0-0 (>= 2.0.2), libsdl2-net-2.0-0 (>= 2.0.1), libsdl2-ttf-2.0-0 (>= 2.0.14), libsndfile1 (>= 1.0.20), libspeex1 (>= 1.2~beta3-1), libspeexdsp1 (>= 1.2~beta3.2-1), libstdc++6 (>= 5.2), libswscale4 (>= 7:3.4.2), libvorbisfile3 (>= 1.1.2), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4)"
PAK_NEEDS=$(echo "$PAK_NEEDS" | perl -pe 's/([[:punct:]])/\\\1/g')
10 - Requires: [ libasound2 (>= 1.0.16), libavcodec57 (>= 7:3.4.2) | libavcodec-extra57 (>= 7:3.4.2), libavformat57 (>= 7:3.4.2), libavutil55 (>= 7:3.4.2), libboost-filesystem1.65.1, libboost-system1.65.1, libc6 (>= 2.27), libcurl4 (>= 7.16.2), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgl1, libglu1-mesa | libglu1, libmad0 (>= 0.15.1b-3), libsdl2-2.0-0 (>= 2.0.8), libsdl2-image-2.0-0 (>= 2.0.2), libsdl2-net-2.0-0 (>= 2.0.1), libsdl2-ttf-2.0-0 (>= 2.0.14), libsndfile1 (>= 1.0.20), libspeex1 (>= 1.2~beta3-1), libspeexdsp1 (>= 1.2~beta3.2-1), libstdc++6 (>= 5.2), libswscale4 (>= 7:3.4.2), libvorbisfile3 (>= 1.1.2), libzzip-0-13 (>= 0.13.56), zlib1g (>= 1:1.1.4) ]
Другие вопросы по тегам