Непорочный user modules. Безысходный. Установка модулей ядра Linux

]

Modules are used to extend and modify the way ZNC functions. Users interact with modules most commonly by messaging a special user on IRC. For example, to view the highlight keywords in your watch list, you"d send /msg *watch list . When ZNC sees that the nick you"re messaging starts with an asterisk, it doesn"t forward the message to the IRCd/server but instead sends it to the proper module for processing. In this case, the watch module will get the message and reply to you with a listing of your keywords. This makes for a very convenient and standard way of configuring or otherwise communicating with your loaded modules, as well as a common and standard way for your loaded modules to display status or other information. Notice that this is for loaded modules. You must load a given module, for example /znc loadmod watch , before you can interface with the watch module. Most modules will reply to /msg *module help with a listing of available commands.

ZNC modules are loaded either globally , per-network , or on a per-user basis. Each module defines for itself whether it is available to load as global, network-specific and/or user-specific. User level and network modules can do things ranging from manipulating the incoming/outgoing messages to implementing a full blown Twitter client . They can also do more traditional IRC tasks such as challenge based auto-op , setting you away , or logging to disk . Each user gets to load and configure their own set of modules to customize their experience to suit their preference.

Global modules are loadable by admins and provide functionality or change behavior for all users. For example, the partyline module has to be global since it provides functionality for all users on a given ZNC instance to be able to communicate with each other from within ZNC itself. Global modules can do everything that user-level modules can do, as well as a few extras. They can replace ZNC"s authentication system , modify the config-writing process, deal with CAP, etc.

Feel free to create wikipages about modules you have created, but don"t forget to add a download link, contact information, and use the same layout as the rest of the modules. Contributions are always much appreciated.

Module List [ edit ]

Global Modules [ edit ]

adminlog Log user connects, disconnects, and failed logins to a file and/or to syslog. blockuser Blocks certain users from using ZNC, saying their account was disabled. certauth This module lets users to log in via SSL client keys. cyrusauth This module is intended for admins who run a shell/web/email/etc server and want to provide ZNC access to their existing users. fail2ban Block IPs for some time after a failed login. identfile Posts the ident of a user to a file when they are trying to connect. imapauth Allow users to authenticate via IMAP. lastseen Logs when a user last logged in to ZNC. modperl Loads Perl scripts as ZNC modules. modpython Allows you to use modules written on Python. notify_connect Sends a notice to all admins when a user logs in or out of ZNC. partyline Allows ZNC users to join internal channels and query other ZNC users on the same ZNC. webadmin Allows you to add/remove/edit users and settings on the fly via a web browser.

User Modules [ edit ]

admin (Now controlpanel) Allows you to add/remove/edit users and settings on the fly via IRC messages. autoattach Watches your detached channels and reattaches you automatically when there is specified activity in a channel you added to your autoattach list. autoreply Gives a automatic reply if someone messages you while you are away. block_motd Blocks the server"s Message of the Day. bouncedcc Bounces DCC transfers through the znc server instead of sending them directly to the user. buffextras Add nick changes, joins, parts, topic changes etc. to your playback buffer. chansaver Saves channels to config when user joins and parts. charset Normalizes (i.e. converts) character encodings. clearbufferonmsg This module attempts to bridge the gap between being inundated with old buffer if you have KeepBuffer=true; and possibly missing messages when you ping out, if you have KeepBuffer=false. clientnotify Notify about new incoming connections to your user. controlpanel Allows you to add/remove/edit users and settings on the fly via IRC messages. ctcpflood This module tries to block CTCP floods. dcc This module allows you to transfer files to and from ZNC disconkick This module will kick your client from all channels if ZNC disconnects from server. flooddetach This module detaches you from channels which are flooded. listsockets This module displays a list of all open sockets in ZNC. log Log chat activity to file. missingmotd This user module will send 422 to clients when they login. notes Keep and replay notes. This is an example of WebMods . sample This is an example module to help with writing modules to do whatever you want. send_raw Allows you to send raw traffic to IRC from other users. shell Access your Unix shell via query right inside of your IRC client.

Network Modules [ edit ]

autocycle Rejoin a channel when you are the only one there (to gain operator status). autoop Automatically give operator status to the good guys. modtcl Allows you to run Tcl scripts in ZNC. autovoice Automatically give voice status to everyone who joins some channel. awaynick Change your nick while you are away. awaystore When you are set away or detached, this module will save all private messages for you. The messages can be read until you delete them. This module will also set you away when you are idle some time. cert This module lets users use their own SSL certificate to connect to a server. crypt Encryption for channel/private messages. keepnick Tries to get and keep your primary nick if it is taken. kickrejoin Implements auto-rejoin-on-kick. modules_online Fakes online status of ZNC modules to fix some clients. nickserv Auths you with NickServ. perform Performs commands on connect. Auths you with Q (and a little more). raw View all of the raw traffic. route_replies Routes back answers to the right client when connected with multiple clients. sasl Allows you to authenticate to an IRC network via SASL savebuff Saves your channel buffers into an encrypted file so they can survive restarts and reboots. schat SSL (encrypted) DCC chats. simple_away Automatically set you away on IRC when disconnected from the bouncer. stickychan Keeps you in specified channels. watch Monitor activity for specific text patterns from specific users and have the text sent to a special query window.

More Modules [ edit ]

Managing Modules [ edit ]

Modules can be added or removed easily. Modules can be stored in ~/.znc/modules and /usr/local/lib/znc by default. ZNC installs its modules to that second directory, which in fact is ${prefix}/lib/znc , but this can be changed with ./configure --module-prefix=DIR before compiling.

ZNC will first look in the local sub-directory modules when searching for modules. Only files that end with ".so" will be seen as a module. To remove modules you can simply delete them from the folder. No other configuration changes or restarts are necessary. To remove, but also keep a module for later use you can also change the name, like: mv sample.so sample.so_ .

To compile a new module you must first save the source as a ".cpp" file. Compiling modules describes the process in detail.

Global, user, and network modules can be (un)loaded from webadmin or via the *status query window, like:

/msg *status LoadMod [--type=global|user|network] /msg *status UnloadMod [--type=global|user|network]

  • configuration
  • [--type=global|user|network] optionally specifies whether to (un)load the module as a global, user, or network module. Not all modules can be loaded at all levels; see individual Module documentation to find out where it may be loaded.
  • is based on the modules file name, excluding the ".so" extension.
  • Are specific for each module and not required: You can provide parameters when loading the module, or you can set up the module after loading it.

So, to load the log module at the global level (as opposed to user or network) and remove all color/formatting control codes with the -sanitize parameter, you would type:

/msg *status LoadMod --type=global log -sanitize

For older versions of ZNC, you won"t have the option to specify [--type=global|user|network] . In that case, just use:

/msg *status LoadMod /msg *status UnloadMod

Please keep in mind that a user is not able to load a module if the directive "DenyLoadMod" is set to true. Trying to load a module will fail with "Unable to load [] Access Denied.".

If a module prevents ZNC from starting up and therefore you can"t unload the module using webadmin , you can edit znc.conf and remove the corresponding LoadModule line.

Using modules [ edit ]

It is recommended to read the module"s wikipage if you want to find out how a module works. Alternatively the following command can be used to get a command list:

/msg * help

  • * is the StatusPrefix set in your configuration . Usually it"s just an asterisk ("*").

NODE.JS – программное средство для выполнения js.

Nodejs = V8 + I/O + библиотеки

V8: быстро, современно, экономно

Преимущества

  • Javascript
  • Общий код на клиенте и на сервере
  • Основные задачи по web
  • Много соединений и задач одновременно
  • Легко создать рабочий прототип
  • Удобный менеджер пакетов npm
  • Сообщество

Установка

при установке nodejs прописывает себя в переменную PATH (+ npm), [администрирование – переменные среды]; можно проверить в командной строке:
set PATH

Как правило под nodejs запускают файлы: напишем простой скрипт и запустим его посредством командной строки:


Скрипт будет выполнен и результат отобразится в командной строке.

Документация по nodejs

Модули nodejs

Чтобы разобраться как работают встроенные модули nodejs необходимо скачать архив с исходниками с сайта nodejs (source code). И зайти в директорию lib . (команда dir - получаем список файлов через командную строку; Если вам необходимо перечислить файлы во всех вложенных папках, то вместо " dir " используйте " dir /s "). Если вы поставили nodejs из пакета, то в папке lib файлов не обнаружите.

В nodejs есть модули с разной степенью стабильности . (например, 0 – не стоит использовать; 1 , 2 – использовать можно но API модуля может измениться).

Функции растут (проект развивается) и со временем нам потребуется вынести функцию-конструктор USER в отдельный файл. Вот тут-то в дело вступают модули.

Модули этого своего рода способ, который предлагает nodejs для организации проекта.

Проекты как правило разрастаются, что приводит к желанию разбить проект на несколько файлов – вот тут-то в дело вступают модули.

require

Для html-страниц для подключения скриптов используют тег script . В nodejs существует специальная команда require .

Var user = require("./user");

В нашем примере мы обращаемся к файлу (user.js) в той же директории (расширение (.js) писать необязательно).

//require("./user"); // .js указывать необязательно // в этом случае файл будет выполнен, но переменной USER // не будет // в этом главное отличие от тегов script от nodejs // В node.js функции и переменные каждого модуля являются глобальными // для данного файла (самого модуля) и они не становятся автоматически // доступными при подключении (require("./user")) // Но как же получить доступ? // В каждом модуле есть специальная переменная exports - это объект и то // что я туда положу вернется как результат require var user = require("./user.js"); // результат: user = { User: function }

Первое отличие модульной системы nodejs от браузерных скриптов: если в браузере есть два тега script , то функция, которая определена на глобальном уровне одном из них доступна и в другом, а в nodejs нет. В nodejs функции и переменные являются глобальными для данного файла (они не становятся доступными при подключении посредством require). Таким образом nodejs позволяет писать действительно независимые модули. Но чтобы модуль был доступен используется система экспортов . В каждом модуле есть специальная переменная exports .

Модуль-директория DIR/index

Подключаем непосредственно папку var user = require("./user"); , в которой лежит соответствующий index.js .

Например

Function User(name){ this.name = name; } User.prototype.hello = function(who){ console.log(phrases.Hello + ", " + who.name); }; exports.User = User;

Подключаем и используем конструктор User в файле./server.js

//server.js var user = require("./user"); var vasya = new user.User("Вася");

« ./ » - относительно текущей папки

exports – это объект и то, что туда положено, вернется как результат require (exports.jpg). Таким образом модуль может объявить свои приватные переменные/функции и экспортировать лишь то, что необходимо.


Для глобальных переменных и т.д. существует объект global

Global.User = User;

Итог

  • Подключение require
  • Переменные: var (приватные у модулей), exports , global (используется редко)
  • Виды модулей: js , node (с расширением.node), json (с расширением.json) . Модули json используются в том случае, когда требуется хранить какую-либо простую информацию на файле.
  • Модуль-директория DIR/index

Объект module

  • Объект module
  • Модуль-функция module.exports = function
  • Кеширование модулей (заново модуль никогда не читается)
  • Расположение модулей: порядок поиска
  • Передаем параметры: модуль-фабрика

Объект module (основополагающий объект для модулей) является переменной, которая существует в каждом модуле (файле, можно вывести console.log(module);). . Содержимое: свойство id – как правило путь к файлу,
parent – ссылка на родительский модуль (module.parent - ссылка на родительский модуль, который require данный),
children (module.children - те модули, которые подключены посредством require),
свойство exports и другие.

Модуль или приложение? module.parent

Модуль может быть запущен напрямую, а если нет, если функционал подключен к другому модулю, то пусть он этот функционал экспортирует. Разделить эти два случая можно при помощи проверки:

If(module.parent) { exports.run = run; } else { run(); }


пс: как говорится на stackoverflow.com Родетелем является модуль, который вызвал скрипт для интерпретации

// $ node foo.js console.log(module.parent); // null // require("./foo") console.log(module.parent); // { ... }

Правильное использование module.exports

В контексте модуля:

module.exports = exports = this (данные конструкции равнозначны)

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

Module.exports = User;


Кеширование модулей

Когда Nodejs загружает модуль он полностью создает соответствующий объект module (с учетом parent , exports и других аналогичных свойств) и запоминает его у себя (module.id (полный путь к файлу) служит идентификатором для внутреннего кэша) и в следующий раз, когда мы повторно обращаемся (подключаем) к какому-либо модулю (файлу), nodejs берет все тот же объект из кэша. То есть, например, инициализировать модуль достаточно 1 раз в каком-либо файле, в дальнейшем его можно просто использовать.

В нашем случае для var db = require("../db");
и для var db = require("./db"); берется один и тот же объект. Поэтому принцип следующий: в первый раз, когда используется модуль, он инициализируется и в дальнейшем мы его только подключаем и пользуемся им (то есть в нашем случае нам не нужно использовать db.connect() дважды, то есть в разных файлах).


Расположение модулей: порядок поиска модулей в nodejs

Как сделать так, чтобы db подключалась всегда без указания специфичного пути:

Var db = require("../db"); //или var db = require("./db");

а вот так:

Var db = require("db");

в независимости от того в каком файле подключается db .

Для этого нужно понимать порядок поиска модулей в nodejs (то что происходит, когда вызывается require). В nodejs существует множество встроенных модулей, например, require("fs"); , который будет подключен без проблем. Если же в require указать конкретный путь, например, require("../db"); , то поиск будет вестись исходя из заданного пути и файл будет найден, либо nodejs попытается получить этот файл как директорию (и будет искать index.js внутри категории).

Если же указать require("db"); и при этом модуль не является встроенным, то будет произведен поиск директории node_modules относительно текущего положения (если найдет, то попытается взять модуль из нее). Если директория node_modules отсутствует, то директория node_modules будет искаться выше и т.д.

Помимо указания конкретного пути для модуля, nodejs может искать модули следующим образом:

Введение в npm – менеджер пакетов для Node.JS

  1. создать файл с описанием пакета (package.json), который содержит информацию о модуле (имя, версия и т.д.). Либо вручную, либо через команду
    npm init
    (запросит нужную информацию)
  2. Чтобы опубликовать модуль необходимо:
    1. Добавить юзера посредством команды npm adduser (необходимо ввесть Username и Password). Теперь вся работа с npm будет от имени этого пользователя. Юзер может залогинится на https://www.npmjs.com/~name_user и наблюдать за своими модулями.
    2. Публикация: npm publish
  3. Далее кто-либо может использовать Ваш, добавленный в базу, модуль, а сам пользователь вносить изменения.
  4. Получаем все команды npm при помощи команды npm help
  5. Поиск нужно модуля в базе данных: npm s ключевые_слова или npm search ключевые_слова (например, npm s super module)
  6. Устанавливаем модуль: npm install name_module или npm i name_module
  7. При установке модулей nodejs сначала ищет папку node_modules в текущей директории (потом выше и выше и т.д), либо (если node_modules отсутствует) ищет package.json (также поднимаясь вверх; package.json , как правило, обозначает корень проекта) и, соответственно, если находит package.json, то делает в соответствующей директории папку node_modules ; если же оба варианта не проходят, то nodejs делает папку node_modules в текущей директории. Если вы хотите поставить модуль в определенную директорию, то в этой директории необходимо создать папку node_modules .
  8. npm up обновить модуль (проверит модули на обновление, которые есть в папке node_modules)
  9. npm remove имя_модуля (удалить модуль)

Вывод по npm:

npm init
nmp adduser
npm publish
npm search ключевые слова
npm install модуль
npm update модуль
npm remove модуль
npm help команда

Структура пакета NPM

Установка нужной версии, например: npm i [email protected]

Последнюю версию модуля можно получить в том случае, если модуль разрабатывается, используя систему версинирования git, например, на github. Достаточно получить Git Read-Only (url): https://github.com/strongloop/express.git и в консоли:

npm i https://github.com/strongloop/express.git

dependencies в package.json

dependencies указывает на те модули, от которых зависит данный.

devDependencies

Модули прописанные в devDependencies не ставятся, если модуль подтягивается как зависимость. Они ставятся лишь для разработки и их можно установить, если, например, зайти в модуль в папке node_modules и прописать npm i (или при установке флага npm config).

поле main задает точку входа в пакет

Глобальные модули

Любой модуль можно поставить глобально, если поставить флаг -g: npm -g модуль

Глобально означает в системную директорию.

Директория глобальных модулей под windows:

C:\users\User_Name\AppData\Roaming\npm

Глобальные модули ставятся в стандартную системную директорию. Те бинарники, которые есть в package.json будут поставлены по системному пути (это и есть основное применение глобальных модулей), то есть в дальнейшем их можно будет вызвать через консоль.

По материалам курсов И. Кантора

См … Словарь синонимов

БЕЗЫСХОДНЫЙ, безысходная, безысходное; безысходен, безысходна, безысходно (книжн.). Непоправимый, нескончаемый. Безысходная скорбь. Толковый словарь Ушакова. Д.Н. Ушаков. 1935 1940 … Толковый словарь Ушакова

БЕЗЫСХОДНЫЙ, ая, ое; ден, дна (книжн.). О горе, печали: не имеющий исхода, конца. Безысходная тоска. | сущ. безысходность, и, жен. Толковый словарь Ожегова. С.И. Ожегов, Н.Ю. Шведова. 1949 1992 … Толковый словарь Ожегова

безысходный - безысходный трагизм … Словарь русской идиоматики

I прил. Долгий, нескончаемый. II прил. 1. Не оставляющий надежды на благополучный исход или на улучшение; безнадёжный 1.. 2. Не предвещающий успеха, обречённый на неудачу; безнадёжный 2.. 3. Выражающий отсутствие надежды, отчаяние, безысходность; … Современный толковый словарь русского языка Ефремовой

Безысходный, безысходная, безысходное, безысходные, безысходного, безысходной, безысходного, безысходных, безысходному, безысходной, безысходному, безысходным, безысходный, безысходную, безысходное, безысходные, безысходного, безысходную,… … Формы слов

безысходный - безысх одный; кратк. форма ден, дна … Русский орфографический словарь

безысходный - кр.ф. безысхо/ден, безысхо/дна, дно, дны; безысхо/днее … Орфографический словарь русского языка

Ая, ое; ден, дна, дно. = Безнадёжный (1, 3 зн.). Б ая ситуация. Б ая нужда. Б ая тоска. Оказаться в безысходном положении. ◁ Безысходно, нареч. Б. тягостные минуты. Безысходность, и; ж. Чувство безысходности … Энциклопедический словарь

безысходный - ая, ое; ден, дна, дно.; = безнадёжный 1), 3) см. тж. безысходно, безысходность Б ая ситуация. Б ая нужда. Б ая тоска … Словарь многих выражений

Книги

  • Чудесный доктор , А. И. Куприн. "Дай Бог, чтобы наступающий год немного снисходительнее отнёсся к вам, чем этот, а главное - не падайте духом", - так сказал доктор Пирогов семье Мерцаловых. Даже в самый безысходный момент,…
  • День дурака , Иосип Новакович. Что может ждать от жизни человек, родившийся в День дурака? Особенно если на дворе 1948 год и к власти родной Хорватии приходит диктатор Тито? Полный надежд и амбиций Иван Долинар поступает в…

Как вы знаете из статьи что такое ядро Linux, ядро является монолитным. Это значит, что весь исполняемый код сосредоточен в одном файле. Такая архитектура имеет некоторые недостатки, например, невозможность установки новых драйверов без пересборки ядра. Но разработчики нашли решение и этой проблеме, добавив систему модулей.

Ядро Linux позволяет драйверам оборудования, файловых систем, и некоторым другим компонентам быть скомпилированными отдельно - как модули, а не как часть самого ядра. Таким образом, вы можете обновлять драйвера не пересобирая ядро, а также динамически расширять его функциональность. А еще это значит, что вы можете включить в ядре только самое необходимое, а все остальное подключать с помощью модулей. Это очень просто.

В этой статье мы рассмотрим модули ядра Linux, основы работы с ними, просмотр уже загруженных модулей, загрузку, установку и отключение модулей. А также полное отключение, добавление в черный список и добавление новых модулей ядра.

Модули ядра Linux собираются только под определенную версию ядра, есть способ запуска модуля независимо от версии ядра, если они совместимы с помощью dkms, но об этом мы поговорим позже.

Находятся все модули в папке /lib/modules/. Учитывая, что модули рассчитаны только для определенной версии ядра, то в этой папке создается отдельная подпапка, для каждой установленной в системе версии ядра. В этой папке находятся сами модули и дополнительные конфигурационные файлы, модули отсортированы по категориям, в зависимости от назначения например:

ls /lib/modules/4.1.20-11-default/kernel/

arch Documentation fs lib net sound
crypto drivers kernel mm security

Перед тем как переходить к практике, давайте коротко рассмотрим основные команды для управления модулями.

  • lsmod - посмотреть загруженные модули
  • modinfo - информация о модуле
  • insmod - загрузить модуль
  • rmmod - удалить модуль

Работа с модулями ядра Linux выполняется, в основном, с помощью этих команд, но могут использовать и другие.

Все модули

Такая задача возникает нечасто, но если вы хотите посмотреть все установленные модули ядра Linux в системе, делается очень просто. Все модули расположены в папке /lib/modules, а поэтому очень просто вычислить их все одной командой, или даже просто зайти в папку файловым менеджером и посмотреть.

В Ubuntu команда будет выглядеть вот так:

dpkg -S *.ko | grep /lib/modules

Можно смастерить такую конструкцию с помощью find:

find /lib/modules -name *.ko

Можем искать только для текущего ядра:

find /lib/modules/$(uname -r) -name *.ko

Также, все модули записаны в конфигурационном файле /lib/modules/modules.aliases, поэтому мы можем просто посмотреть его содержимое:

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

find /lib/modules -name *.ko | grep vbox

/lib/modules/4.1.20-11-default/weak-updates/misc/vboxnetadp.ko
/lib/modules/4.1.20-11-default/weak-updates/misc/vboxvideo.ko

Что загружено?

Все информация о загруженных модулях хранится в файле /proc/modules, мы можем ее вывести командой:

cat /proc/modules

tun 32768 2 - Live 0xffffffffa07a9000
vboxpci 28672 0 - Live 0xffffffffa07a1000 (O)
vboxnetadp 28672 0 - Live 0xffffffffa0632000 (O)
vboxnetflt 32768 0 - Live 0xffffffffa06f3000 (O)
af_packet 40960 8 - Live 0xffffffffa065b000

Но для этого дела есть более цивилизованные методы. Это утилита lsmod и modinfo. Чтобы посмотреть загруженные модули ядра linux выполните:

Module Size Used by
ctr 16384 2
ccm 20480 2
fuse 106496 3
bnep 20480 2
bluetooth 532480 5 bnep

Удобно проверять загружен ли модуль с помощью grep:

sudo lsmod | grep vbox

А более подробную информацию о каждом модуле можно получить с помощью утилиты modinfo:

filename: /lib/modules/4.1.20-11-default/kernel/fs/fuse/fuse.ko
alias: devname:fuse
alias: char-major-10-229
alias: fs-fuseblk
alias: fs-fuse
license: GPL
description: Filesystem in Userspace
author: Miklos Szeredi
alias: fs-fusectl
srcversion: 739DE4A12CE441C9FBD74C7

Здесь вы можете увидеть файл модуля, его лицензию, автора и зависимости. Зависимости - это те модули, которые должны быть загружены для его нормальной работы. К сожалению, не для всех модулей доступно нормальное описание, но вы можете попробовать посмотреть описание зависимостей модуля.

Запуск модулей ядра

Загрузить модуль ядра Linux можно с помощью команд modprobe или insmod.

Например, загрузим модуль vboxdrv

sudo modprobe vboxdrv

Чтобы загрузить модуль ядра linux с помощью insmod необходимо передать адрес файла модуля:

sudo insmod /lib/modules/4.1.20-11-default/weak-updates/misc/vboxdrv.ko

Напоминаю, что его можно узнать с помощью команды modinfo. Запуск модуля ядра Linux предпочтительно выполнять с помощью modprobe, поскольку эта команда не только находит файл модуля в файловой системе, но и загружает все его зависимости.

Удаление модулей ядра

Здесь аналогично две команды - modprobe, позволяет удалить модуль если ей передать опцию -r, а также есть команда rmmod. Начнем с modprobe:

sudo modprobe -r vboxdrv

Другая команда в этом случае выглядит немного проще:

sudo rmmod vboxdrv

rmmod: ERROR: Module vboxdrv is in use by: vboxnetadp vboxnetflt vboxpci

Если вы получили ошибку во время выгрузки модуля, значит он еще используется другими модулями, и сначала нужно выгрузить их. Правильно отработавшая команда не должна ничего возвращать.

rmmod vboxnetadp vboxnetflt vboxpci

Блокирование загрузки модулей

Иногда, во время загрузки системы для используемых нами устройств, загружаются не те модули ядра Linux, они либо не поддерживают нужную функциональность либо конфликтуют с другими модулями. Ярким примером можно назвать загрузку драйвера b43 вместо brcmsmac для беспроводных адаптеров Broadcom. Чтобы решить эту проблему вы можете добавлять модули в черный список. Для этого достаточно добавить одну строчку в файл /etc/modprobe.d/blacklist.conf:

vi /etc/modprobe.d/blacklist.conf

Этот код добавит в черный список модуль b43.

Установка модулей ядра Linux

Собранные для этой версии ядра модули вы можете просто скопировать в нужную папку, собственно, мы так и поступаем, когда собираем ядро из исходников. Но с проприетарными драйверами и другими внешними драйверами, не поставляемыми в комплекте с ядром дело обстоит иначе. Эти модули поддерживают несколько версий ядра, но для их установки используется специальная технология - DKMS (Dynamic Kernel Module Support). Причем модуль, установленный таким образом один раз, будет пересобираться для каждой новой версии ядра автоматически.

wget http://tenet.dl.sourceforge.net/project/e1000/ixgbe%20stable/4.3.15/ixgbe-4.3.15.tar.gz
$ sudo tar -xf ixgbe-4.3.15.tar.gz -C /usr/local/src
$ sudo mv /usr/local/src/ixgbe-4.3.15/src /usr/src/ixgbe-4.3.15

Создадим конфигурационный файл:

sudo vi /usr/src/ixgbe-4.3.15/dkms.conf

PACKAGE_NAME="ixgbe"
PACKAGE_VERSION="4.3.15"
BUILT_MODULE_NAME="ixgbe"
DEST_MODULE_LOCATION="/kernel/drivers/net/ethernet/intel/ixgbe/"
AUTOINSTALL="yes"

Добавим модуль в дерево ядра:

sudo dkms add -m ixgbe -v 4.3.15

Запускаем сборку, для текущего ядра:

sudo dkms build -m ixgbe -v 4.3.15

И устанавливаем:

sudo dkms install -m ixgbe -v 4.3.15

Установка модулей ядра завершена. Теперь вы можете посмотреть информацию о драйвере или загрузить его:

dkms status | grep ixgbe

Выводы

Скорее всего, вам редко придется возиться с этими модулями. Но работа с модулями ядра будет необходима, если ваш дистрибутив не поддерживает аппаратное обеспечение вашего устройства из коробки, а также когда вы работаете со сторонним программным обеспечением, таким как VirtualBox, Vmware и т д. Но очень полезно знать как обращаться с модулями, когда вам нужно добавить или удалить их. Даже если у вас нет необходимости в этом сейчас, вы можете протестировать, как все работает, чтобы быть вооруженным потом.