я предложил бы не делать этого. Обычно легче создать двоичные файлы для различных дистрибутивов в рамках процесса создания пакета того дистрибутива. На CentOS, который использовал бы rpmbuild
.
, Так как вы имеете дело с VMs, это было бы намного более тривиально, чтобы установить CentOS 7 VM + инструменты сборки и затем сделать конструкцию пакета там.
я обычно не примыкаю к победившей стороне и редактирую другой ответ народов, но я зарабатываю свою репутацию здесь медленно, но конечно, помогая людям осознать различие между основанным на источнике распределением, которого существует 3 главных:
и основанное на двоичном файле распределение, которого существует 2 главных:
На данный момент, существует только 1 основное гибридное распределение (пересечение источника и двоичного файла):
, Нравится ли пользователям Linux это или нет, все другие дистрибутивы Linux, является детьми к одному из этих 6 родителей. Так как это сказан, мы идем дальше к следующему вопросу что:
Невозможно Смешать программное обеспечение От основанного на источнике Распределения с программным обеспечением в Двоичном Распределении
Знание, что это также означает, , если вы не знаете то, что вы делаете, вы не должны компилировать единственный пакет из источника на двоичном дистрибутиве . Существуют исключения к этому правилу:
С технической точки зрения, нет никакого различия в использовании пакета и создании из источника когда дело доходит до заключительного пакета, т.е. если можно создать пакет успешно, и это работает, никто не даст сбой вы для того, чтобы сделать его. Необходимо помнить что, когда вы делаете это, хотя, что инструменты вы раньше создавали ваше приложение на одном основанном на двоичном файле распределении, больше, чем версии инструментов, доступных в другом двоичном распределении. То, что видит OP, является дельтой или изменением, между старыми и новыми пакетами. Дельта или изменение вызываются Пакетом и Специалистами по обслуживанию ОС Каждой ОС,быть этим один из 6 выше, или дети, выбрав, какой пакет они отметят стабильный для их ОС. После того как пакет выбран в Двоичном Распределении, большинство раз он замораживается до следующего выпуска, если Критическая Ошибка не Открыта.
А основанное на источнике Распределение, с другой стороны, может принять решение обновить предметы, как только новые источники доступны, таким образом bugfixing на лету.
план выпуска, и цикл обновления для Ubuntu принял решение принять новые версии Набор инструментальных средств Сборки , прежде чем CentOS принял их. Так как CentOS основан на устойчивости, Набор инструментальных средств Сборки не может быть обновлен до их следующего главная версия . Как таковой OP испытывал выпуск , подобный этому , потому что Набор инструментальных средств Сборки Ubuntu поддерживает C++ 11, и CentOS делает, только когда все несоответствия версии восстанавливаются и позже столкнутся с проблемами с использованием нескольких Диспетчеров пакетов.
binutils
или в libtool
Binutils зависит от glibc, и libtool зависит от binutils, поэтому , libtool
косвенно зависит от glibc
, который я не объясню, почему почти каждый пакет в любой системе косвенно зависит от , glibc
просто знает, что делает. Вы Можно Теперь Получите эту информацию со SS
:
# ss -xp
Теперь вы можете увидеть в Peer
столбец ID (номер INODE ) который соответствует другому идентификатору в колонке
столбца . Соответствующие идентификаторы - два конца розетки.
Примечание. Опция Unix_diag
должна быть включена в вашем ядре.
Linux не подвергалась этой информации в пользовательскую информацию.
Однако по выглядит в памяти ядра , мы можем получить доступ к этой информации.
Примечание. Этот ответ делает это с помощью GDB
, однако, см. @ STÉPHANECHAZELAS 'Ответ , который более разработан в этом отношении.
# lsof | grep whatever
mysqld 14450 (...) unix 0xffff8801011e8280 (...) /var/run/mysqld/mysqld.sock
mysqld 14450 (...) unix 0xffff8801011e9600 (...) /var/run/mysqld/mysqld.sock
Существует 2 разных розетка, 1 прослушивание и 1 установлено. Номер Hexa - это адрес для соответствующего ядра структуры Unix_Sock
, имеющий атрибут
, являющийся адресом другой конец розетки (также Экземпляр структуры Unix_Sock
).
Теперь мы можем использовать GDB
, чтобы найти Peer
в памяти ядра:
# gdb /usr/lib/debug/boot/vmlinux-3.2.0-4-amd64 /proc/kcore
(gdb) print ((struct unix_sock*)0xffff8801011e9600)->peer
$1 = (struct sock *) 0xffff880171f078c0
# lsof | grep 0xffff880171f078c0
mysql 14815 (...) unix 0xffff880171f078c0 (...) socket
Здесь вы идете, другой конец сокета удерживается MySQL
, PID 14815.
Ваше ядро должно быть составлено KCORE_
для использования / proc / kcore
. Кроме того, вам нужна версия изображения вашего ядра с отладки символов. На Debian 7 APT-Get-Get Install Install Linux-Image-3.2.0-4-AMD64-DBG
предоставит этот файл.
Если у вас нет (или не хочу сохранять) отладочный образ ядра в системе, вы можете дать GDB
Смещение памяти для «вручную» получить доступ к Value
значение . Это значение смещения обычно отличается версией или архитектурой ядра.
На моем ядре я знаю, что смещение составляет 680 байтов, в 85 раз 64 бит. Так что я могу сделать:
# gdb /boot/vmlinux-3.2.0-4-amd64 /proc/kcore
(gdb) print ((void**)0xffff8801011e9600)[85]
$1 = (void *) 0xffff880171f078c0
Вуаля, тот же результат, что и выше.
Если у вас есть одно и то же ядро, запущенное на нескольких машине, легче использовать этот вариант, поскольку вам не нужен изображение отладки, только значение смещения.
Чтобы сначала (легко) Откройте для себя это значение смещения сначала, вам нужна Image Debug:
$ pahole -C unix_sock /usr/lib/debug/boot/vmlinux-3.2.0-4-amd64
struct unix_sock {
(...)
struct sock * peer; /* 680 8 */
(...)
}
Здесь вы идете, 680 байтов, это 85 х 64 бит или 170 х 32 бита.
Большая часть кредита за этот ответ имеет значение MVG .
-121--7539- Вам нужен шаблон для нахождения
; Скажи "my.cnf":
vi $( locate my.cnf | head -n3 | tail -n1 )
Предостережение: Никаких Ньюлайн в именах файлов, пожалуйста. :)