Не следует устанавливать пакеты с суффиксом .src.rpm
. Пакеты с этим суффиксом необходимы для сборки пакетов RPM в собственной системе.
Инструменты VMware (также инструменты VBox )создают модули для вашего ядра. Поэтому ему нужны инструменты :компилятор, заголовки ядра и среда сборки (Makefiles с определенными предопределенными макросами и пара скриптов ).
Компилятор предоставляет пакет gcc-
. Вы должны убедиться, что ваша версия компилятора работающего ядра(cat /proc/version
=>gcc version
)и установленного пакета компилятора gcc-
совпадают.
В Centos 7 пакет kernel-devel-$(uname -r)
предоставляет заголовки ядра со средой сборки.
Это все, что вам нужно для создания инструментов VMware (или инструментов VBox ).
УПД:
О open-vm-tools
в Centos 7 и сборке Centos 7. Centos 7 уже имеет open-vm-tools
в репозитории. Он содержит 2 systemd-сервиса(vgauthd
и vmtoolsd
), vmware-
программы и документацию.
Я скачал open-vm-tools
(yumdownloader --source open-vm-tools
), чтобы посмотреть в файле spec
, как он строится. В макросе %build
содержится эта инструкция:
%configure \
--without-kernel-modules \
--enable-xmlsec1 \
--disable-static
Таким образом, в пакете нет модулей. Где модули? В github open -vm -tools README.md написал:
The open-vm-tools packages available with Linux distributions do not include Linux drivers because Linux drivers are available as part of Linux kernel itself.
Это правда. Проверил на своем Centos 7 (x86 _64):
find /lib/modules/$(uname -r) -name 'vm*'
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/crypto/vmac.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/gpu/drm/vmwgfx
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_balloon.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_vmci
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/net/vmxnet3
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/net/vmxnet3/vmxnet3.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/drivers/scsi/vmw_pvscsi.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_virtio_transport_common.ko.xz
/lib/modules/3.10.0-693.21.1.el7.x86_64/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko.xz
Я скачал вашу версию ядра(3.10.0 -693.2.2.el7.centos.plus.i686)и изучил ее содержимое:
$ ls kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm
kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm
$ rpm2cpio kernel-3.10.0-693.2.2.el7.centos.plus.i686.rpm | cpio -idm # content will be extracted to boot and lib directories in this directory
$ find./lib/ -name 'vm*'
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/crypto/vmac.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/gpu/drm/vmwgfx
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/gpu/drm/vmwgfx/vmwgfx.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_balloon.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_vmci
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/net/vmxnet3
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/net/vmxnet3/vmxnet3.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/drivers/scsi/vmw_pvscsi.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_virtio_transport.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_virtio_transport_common.ko
./lib/modules/3.10.0-693.2.2.el7.centos.plus.i686/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko
Итак. Модули и инструменты предоставляются репозиторием. Вы можете перестроить инструменты, но с --without-kernel-modules
. Если вы хотите пересобрать модули (, я сомневаюсь, что это необходимо ), вам следует пересобрать пакет ядра. Подробная инструкция представлена в Centos Wiki .
УПД2:
Настройка служб. После того, как успешно скомпилированные инструменты были установлены, необходимо создать 2 служебных файла в /usr/lib/systemd/system
со следующим содержимым:
vmtoolsd.service:
[Unit]
Description=Service for virtual machines hosted on VMware
Documentation=http://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware
Requires=vgauthd.service
After=vgauthd.service
[Service]
ExecStart=/usr/local/bin/vmtoolsd
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Also=vgauthd.service
vgautd.service:
[Unit]
Description=VGAuth Service for open-vm-tools
Documentation=http://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware
PartOf=vmtoolsd.service
[Service]
ExecStart=/usr/local/bin/VGAuthService -s
TimeoutStopSec=5
PrivateTmp=true
[Install]
RequiredBy=vmtoolsd.service
Когда они будут созданы, вам необходимо перезагрузить зависимости модулей с помощью systemctd daemon-reload
. После этого вы сможете запустить услуги, позвонив по номеру systemctl start vmtoolsd
или systemctl start vgauthd
.
Чтобы избежать find
входа в каталоги, которые на самом деле вам недоступны, вы можете использовать! -executable -prune
:
find. ! -executable -prune -type f ! -user "$USER"
Отрицательный тест -executable
будет верен для каталогов, к которым у вас нет доступа, и -prune
удалит их из дерева поиска find
, останавливая попытки утилиты получить к ним доступ, и, таким образом, избегая генерации ошибок разрешения.
Тест -executable
(, а также аналогичные -readable
и -writable
тесты )не являются стандартными -и требуют GNU find
.
Я не могу (пока )сказать что-либо о различиях в результатах, так как вы ничего не сказали о них. Поскольку выходные данные сильно различаются по размеру, должно быть тривиально найти и изучить случаи, когда одна команда нашла что-то, чего не нашла другая команда.
Хм..., в моем домашнем каталоге обе команды работают одинаково. 8 -/
Тем не менее, вы должны перенаправить stderr в /dev/null и использовать wc -l
для правильного подсчета вывода.
find. -type f ! -user "$USER" 2>/dev/null | wc -l
find. -type f -exec bash -c '
for pathname do
[[ ! -O "$pathname" ]] && printf "%s\n" "$pathname"
done' 2>/dev/null bash {} + | wc -l
Отсюда вы можете перенаправить результаты в текстовые файлы и сравнить файлы, чтобы найти различия.
find. -type f ! -user "$USER" 2>/dev/null > /tmp/file_1.txt
find. -type f -exec bash -c '
for pathname do
[[ ! -O "$pathname" ]] && printf "%s\n" "$pathname"
done' 2>/dev/null bash {} + >/tmp/file_2.txt
diff /tmp/file_{1,2}.txt
Если есть различия, возьмите некоторые лишние файлы из /tmp/file _2.txt и уточните, почему файл не считается «Истинным, если файл существует и принадлежит действующему идентификатору пользователя».