Как связать интерфейс tunX с конкретным экземпляром OpenVPN?

Попробуйте удалить этот файл по его иноду:

ls -lasi | grep filename

find. -inum inode-number -exec rm -rf {} \;
4
17.04.2019, 01:30
3 ответа

Комментарий к YUM & deps

YUM делает это. Но это только настолько хорошо, насколько указывает RPM. В этом случае в вашем RPM указано, что он будет работать с любым GLIBC > 2.13, но он явно был собран с определенной версией GLIBC и будет работать только в том случае, если в системе доступны соответствующие символы GCC :

.
$ rpm -qpR trillian-6.1.0.5-1.fc25.x86_64.rpm
atkmm >= 2.22.0
cairo >= 1.12.0
cairomm >= 1.10.0
gdk-pixbuf2 >= 2.26.0
glib2 >= 2.30.0
glibc >= 2.13
glibmm24 >= 2.32.0
gtk3 >= 3.4.0
gtkmm30 >= 3.4.0
libX11 >= 1.5.0
libXScrnSaver >= 1.2.0
libnotify >= 0.7.5
librsvg2-tools >= 2.36.0
libsigc++20 >= 2.2.10
libzip >= 0.10.0
openssl-libs >= 1:1.0.1
pango >= 1.30.0
pangomm >= 2.28.0
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
zlib >= 1.2.0

Вы можете использовать rpm -qpR <rpm>, чтобы определить, какие зависимости для этого требуются.

Подробнее о вашей проблеме

Суть вашей проблемы в том, что вы пытаетесь использовать пакет, созданный с использованием другой версии компилятора GCC, а не тех библиотек времени выполнения, которые действительно доступны в вашей ОС.

В вашем случае вы используете CentOS 7.x, и вы действительно не можете смешивать RPM между Fedora и CentOS таким образом, или, по крайней мере, вы не должны.

Если вы посмотрите, какой пакет владеет этой общей библиотекой:

$ rpm -qf /lib64/libstdc++.so.6
libstdc++-4.8.5-28.el7_5.1.x86_64

Вы также можете исследовать саму разделяемую библиотеку, чтобы узнать, какие символы GCC она поддерживает:

$ nm -D /lib64/libstdc++.so.6 | grep -i GLIBC | head -5
0000000000000000 A GLIBCXX_3.4
0000000000000000 A GLIBCXX_3.4.1
0000000000000000 A GLIBCXX_3.4.10
0000000000000000 A GLIBCXX_3.4.11
0000000000000000 A GLIBCXX_3.4.12

И, наконец, посмотрите, включает ли он те, которые ищет бинарники этого RPM:

$ nm -D /lib64/libstdc++.so.6 | grep -iE '3\.4\.20|3\.4\.21'
$

Здесь нет ничего удивительного, эта .soбиблиотека не включает символы ни для одной из этих версий GCC, отсюда и ошибка.

Что делать?

Типичные способы решения этой проблемы::

  1. Получите двоичный файл, построенный на основе определений символов вашего GCC
  2. Получите только библиотеку libstdc++.so.6из другого инструмента (Многие приложения предпочитают включать библиотеки для упрощения развертывания/настройки/установки )и указывают на нее через ваш LD_LIBRARY_PATH. Обычно вы делаете это так:

    $ LD_LIBRARY_PATH=/path/to/lib trillian
    
  3. Запустите приложение на виртуальной машине

  4. Запустите приложение в контейнере Docker
  5. Получите версию RPM с двоичными файлами, созданными с использованием символов, совместимых с настройкой GCC вашей ОС.

Учитывая сходство между Fedora и CentOS, я добился хорошего успеха со многими из вышеперечисленных. Вы можете попробовать #5,и попробуйте один из старых RPM-пакетов Fedora на их веб-сайте, чтобы узнать, был ли он построен с использованием символов GCC для CentOS.

Ссылки

6
27.01.2020, 20:48

yumразрешает зависимости, относящиеся к другим пакетам. Другими словами, он устанавливает пакеты, от которых зависят пакеты (и ), которые вы пытаетесь установить.

Ошибка, которую вы получаете, связана с тем, что файл библиотеки /lib64/libstdc++.so.6 не включает GLIBCXX_3.4.20или GLIBCXX_3.4.21. Обычно /usr/lib64/libstdc++.so.6 является символической ссылкой на /usr/lib64/libstdc++.so.6.0. #, где #— самая высокая версия GLIBCXX внутри.

Если вы запустите эту команду, вы увидите включенные версии GLIBCXX:

strings /usr/lib64/libstdc++.so.6 | grep -i ^glibcxx_

Поскольку у вас его нет, вам потребуется установить пакет, содержащий эти библиотеки.

Самый простой для установки пакет, предоставляющий это:

Анаконда3

Вы можете загрузить его с веб-сайта Anaconda, и там есть пошаговое руководство по его установке. После установки вы можете добавить библиотеку Anaconda в LD _LIBRARY _PATH. Например, если вы установили его в /opt/anaconda3, вы добавите эту строку в свой ~/.bash_profileили~/.bashrc:

export LD_LIBRARY_PATH=/opt/anaconda3/lib:$LD_LIBRARY_PATH

Затем вы можете запустить новый сеанс оболочки и снова запустить trillian.

Вы также можете скомпилировать исходники GCC6, GCC7 или GCC8, которые предоставят правильные библиотеки, которые вы затем сможете добавить в свой путь, но вам также придется скомпилировать исходники GMP, MPC и MPFR, что в вашем случае доставляет больше хлопот. чем оно того стоит.

3
27.01.2020, 20:48

Спасибо вам обоим --ваши ответы были очень полезными.

Мне не удалось найти для установки только библиотеку libstdc++, поэтому я решил установить Anaconda3. Это помогло мне обойти эту конкретную проблему только для того, чтобы представить мне другую:

$ триллиан trillian :ошибка поиска символа :trillian :неопределенный символ:_ZN4Glib25filename _display _basenameERKNSt7 __cxx1112basic _stringIcSt11char _traitsIcESaIcEEE

Теперь я иду искать решение этой проблемы. Любые предложения приветствуются, и еще раз спасибо вам обоим за то, что помогли мне зайти так далеко!

0
27.01.2020, 20:48

Теги

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