Как программно проверить, установлен ли getopts? Если нет, установите его [duplicate]

Проблема связана с версией gcc, которая не поддерживает retpoline (что такое retpoline и как она работает?). См. Ошибка Ubuntu: 4.4.0-116 Обновление ядра на 2/21 прерывает драйверы Nvidia (14.04 и 16.04).

В моем случае очистка ppa:ubuntu-toolchain-r/test для установки версии gcc по умолчанию и перестройка с помощью DKMS модуль nvidia (путем переустановки ядра 4.4.0-116) исправляет проблему. См. Что такое retpoline и как это работает? .

Восстановить значение по умолчанию gcc, очистив версию ppa:ubuntu-toolchain-r/test:

$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:ubuntu-toolchain-r/test

версия gcc (на Ubuntu 16.04) с поддержкой retpoline:

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609

Переустановить ядро:

$ sudo apt-get purge linux-headers-4.4.0-116 linux-headers-4.4.0-116-generic linux-image-4.4.0-116-generic linux-image-extra-4.4.0-116-generic linux-signed-image-4.4.0-116-generic
$ sudo apt-get install linux-generic linux-signed-generic

Проверить модуль nvidia:

$ modinfo nvidia_xxx -k 4.4.0-116-generic | grep vermagic
vermagic:       4.4.0-116-generic SMP mod_unload modversions retpoline 

заменить _xxx с вашей версией - просто нажмите TAB после modinfo nvidia

retpoline должен быть на выходе.

После этого успешно завершена reboot.

Если у вас уже есть совместимая версия gcc, вы можете перестроить модуль nvidia с помощью команды dkms, не переустанавливая ядро:

# dkms remove nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
# dkms install nvidia-xxx/yyy.zzz -k 4.4.0-116-generic

Я решил переустановить ядро ​​вместо этого обновите все модули, которые были перестроены с помощью DKMS, используя неправильную версию gcc.

0
задан 11 March 2018 в 16:38

3 ответа

Если вы хотите проверить, установлен ли какой-либо инструмент, который вы запускаете из командной строки, следующая строка:

if [ "`which someCommand`" = "" ]

Команда which проверяет полное имя файла исполняемого файла someCommand, и если файл не найден, выполняется оператор if.

Однако это предполагает, что someCommand - это команда, которую вы можете запустить из командной строки (терминал и т. д.), .

В вашем случае вы, вероятно, захотите проверить, существует ли файл /usr/share/perl5/getopts.pl.

В соответствии с этим вопросом это можно сделать, используя следующую проверку:

Этот оператор проверяет, существует ли какой-либо файл не ...

1
ответ дан 22 May 2018 в 12:38

Если вы хотите проверить, установлен ли какой-либо инструмент, который вы запускаете из командной строки, следующая строка:

if [ "`which someCommand`" = "" ]

Команда which проверяет полное имя файла исполняемого файла someCommand, и если файл не найден, выполняется оператор if.

Однако это предполагает, что someCommand - это команда, которую вы можете запустить из командной строки (терминал и т. д.), .

В вашем случае вы, вероятно, захотите проверить, существует ли файл /usr/share/perl5/getopts.pl.

В соответствии с этим вопросом это можно сделать, используя следующую проверку:

if [ ! -f /usr/share/perl5/getopts.pl ]

Этот оператор проверяет, существует ли какой-либо файл не ...

1
ответ дан 17 July 2018 в 19:05

Если вы хотите проверить, установлен ли какой-либо инструмент, который вы запускаете из командной строки, следующая строка:

if [ "`which someCommand`" = "" ]

Команда which проверяет полное имя файла исполняемого файла someCommand, и если файл не найден, выполняется оператор if.

Однако это предполагает, что someCommand - это команда, которую вы можете запустить из командной строки (терминал и т. д.), .

В вашем случае вы, вероятно, захотите проверить, существует ли файл /usr/share/perl5/getopts.pl.

В соответствии с этим вопросом это можно сделать, используя следующую проверку:

if [ ! -f /usr/share/perl5/getopts.pl ]

Этот оператор проверяет, существует ли какой-либо файл не ...

1
ответ дан 23 July 2018 в 19:52

Другие вопросы по тегам:

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