Java JDK, отсутствующий libjli.so, соединяет каналом в списке зависимости, Debian

  • Передайте все параметры ($*) переданный script кому: program также
  • Проверьте каждый параметр, который Вы заинтересовали, если это уже находится в переданных параметрах, затем проигнорируйте его. иначе используйте значение параметра по умолчанию

Пример кода

interested_parameter_names=(-in -out)
default_parameter_values=(file.in file.out)

program=echo
cmd="$program $*"

for ((index=0; index<${#interested_parameter_names[*]}; index++))
do
    param="${interested_parameter_names[$index]}"
    default_value="${default_parameter_values[$index]}"
    if [ "${*#*$param}" == "$*" ]   # if $* not contains $param
    then
        cmd="$cmd $param $default_value"
    fi
done

echo "command line will be:"
echo "$cmd"

echo
echo "execute result:"
$cmd

Можно легко добавить, что больше параметров/значений по умолчанию включает больше элемента массива $interested_parameter_names и $default_parameter_values

Демонстрационный вывод

$ ./wrapper.sh -in non-default.txt -other-params
command line will be:
echo -in non-default.txt -other-params -out file.out

execute result:
-in non-default.txt -other-params -out file.out

Примечание:

Когда передающие параметры, который содержит пространство, им нужно оставить \, не просто заключил им в кавычки. Пример:

./script -in new\ document.txt
8
20.03.2015, 22:42
2 ответа

Кажется, что вам нужно добавить

/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/jli

в /etc/ld.so.conf, или, скорее всего, к новому файлу в /etc/ld.so.conf.d. Затем запустите ldconfig, чтобы обновить кэш и ldd найдет эту библиотеку.

Для написания скриптов chroots, вам, вероятно, будет не так больно в долгосрочной перспективе использовать пакетный подход, сначала создав базовую установку (используя, например, debootstrap на хостах, основанных на Debian), а затем установив нужные вам пакеты. Это позволит менеджеру пакетов позаботиться обо всей работе по разрешению зависимостей, установке всех необходимых файлов и выполнению задач после установки.

3
27.01.2020, 20:11

Предполагается, что это сработает нестандартно - не связываясь ни с /etc/ld.so.conf*, ни с ldconfig - и это легко сделать. Просто смонтируйте /proc в вашем chroot. Я делаю это со следующей строкой в /etc/fstab в моем real-root fs:

/proc /var/chroot/ia32/proc none bind

Таким образом, привязывая его к реальному /proc.

Per https://github.com/cedric-vincent/PRoot/issues/9, ld-linux.so (наверное) определяет $ORIGIN для подстановки в записи objdump -p's RPATH, глядя на /proc/self/exe.

Сколько раз я был укушен этим и должен был заново открыть его? Пожалуйста, о могучий и мудрый Google, приведите меня сюда быстро в следующий раз, так что будущее - я могу учиться снова на коленях в прошлом!

7
27.01.2020, 20:11

Теги

Похожие вопросы