воскресенье, 16 ноября 2014 г.

О настройке WiFi в Linux

Настройка wifi будет происходить на нетбуке MSI Wind U100. В моем случае драйвер wifi-адаптера был уже скомпилирован и загружен. Оставалось только настроить подключение. Если у вас не обнаруживается карточка wifi, то имеет смысл обратиься к официальной документации Gentoo.

Первым делом нужно обеспечить активацию карты. Нас будет интересовать настройка из командной строки.
Добавим скрипт для включения карты:

root # ln -s /etc/init.d/net.lo /etc/init.d/net.enp2s0

где enp2s0 - имя моей wifi-карты в выводе ifconfig -a

Теперь мы можем включать и выключать карту отправляя команды start и stop скрипту /etc/init.d/net.enp2s0(но пока этого не делайте, нужно еще сделать некоторые настройки). Например так:

root # /etc/init.d/net.enp2s0 start

Далее нужно указать в файле /etc/conf.d/net использование wpa_supplicant. wpa_supplicant - утилита, позволяющая подсоединяться к точкам доступа (с WPA в том числе). Есть еще альтернатива - wireless-tools, но я выбрал wpa_supplicant.
File /etc/conf.d/net
modules_enp2s0="wpa_supplicant"
wpa_supplicant_enp2s0="-Dwext"
config_enp2s0="dhcp"
Здесь wext - это название драйвера, этот должен работать с почти всеми картами. Можно поэкспериментировать с другими драйверами, их названия можно найти в официальной документации. Пока такой задачи не стоит, главное заставить работать.

Настройки wpa_supplicant хранятся в файле /etc/wpa_supplicant/wpa_supplicant.conf, и здесь хранятся самые важные для нас настройки.
root # nano /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
  priority=1
  ssid="my_wifi"
  scan_ssid=1
  key_mgmt=NONE
}
Здесь my_wifi - название сети к которой вы хотите подключиться, priority - приоритет подключения (чем больше, тем лучше), key_mgmt=NONE - не использовать защиту подключения.

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

root # /etc/init.d/net.enp2s0 restart

воскресенье, 6 июля 2014 г.

Локальный оверлей

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

Для создания локального оверлея нам для начала нужен доступ к исходникам необходимой программы и ebuild файл. Ebuild файл представляет собой инструкции для компилятора и при должном упорстве доступен для написания сознательному линуксоиду. Но скорее всего кто-нибоудь поделится ebuild'ом. И здесь будет рассмотрен случай когда у вас есть ebuild файл для нужного приложения. Написани такого файла самостоятельно - это тема для отдельной заметки.

Для начала определимся с местом нашего оверлея. Пусть это будет /usr/local/overlay/. Создадим необходимые каталоги для служебной информации:

root # mkdir -p /usr/local/portage/{metadata,profiles}

заполним их информацией:

root # echo 'tolstiyman' > /usr/local/portage/profiles/repo_name
root # echo 'masters = gentoo' > /usr/local/portage/metadata/layout.conf

здесь tolstiyman - это имя нашего репозитория.

Чтобы наш оверлей имел приоритет перед всеми остальными нужно изменить переменную PORTDIR_OVERLAY в нашем файле make.conf. Для этого просто выполним команду:

root # echo 'PORTDIR_OVERLAY="/usr/local/portage ${PORTDIR_OVERLAY}"' >> /etc/make.conf

Допустим нам нужно установить программу steam-launcher-1.0.0.47 из категории games-util и у нас есть для этого файл steam-launcher-1.0.0.47.ebuild, который лежит в каталоге /root. Проделаем следующее:

root # mkdir -p /usr/local/portage/games-util/steam-launcher
root # cp /root/steam-launcher-1.0.0.47.ebuild /usr/local/portage/games-util/steam-launcher/steam-launcher-1.0.0.47.ebuild
root # pushd /usr/local/portage/games-util/steam-launcher

Пару слов о команде pushd. Она сохраняет имя текущего каталога для команды popd и переходит в другой каталог. Вобщем шаг не обязательный и позволяет после нужных нам манипуляций вернуться в исходный каталог одной командой (popd).

root # repoman manifest

Утилита repoman предназначена для контроля качества репозитариев ебилдов. В даноом случае она генерирует manifest файл. Более подробно об этой утилите на русском языке можно узнать здесь или здесь.

root # popd

Изменяем права доступа к каталогу с оверлеем.

root # chown -R portage:portage /usr/local/portage

Теперь можно установить пакет

root # emerge -a games-util/steam-launcher

Первоисточник на gentoo-wiki

среда, 19 марта 2014 г.

Работа с tar архивами и не только

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

Упаковать, распаковать, просмотреть содержимое tar.gz или tgz архива:

user $ tar cvzf *.tar.gz path/to/folder
user $ tar xvzf *.tar.gz
user $ tar tvzf *.tar.gz

Упаковать, распаковать, просмотреть содержимое tar.bz2 или tbz2 архива:

user $ tar cvjf *.tar.bz2 path/to/folder
user $ tar xvjf *.tar.bz2
user $ tar tvjf *.tar.bz2

Упаковать, распаковать, просмотреть содержимое tar.xz архива:

user $ tar cvJf *.tar.xz path/to/folder
user $ tar xvJf *.tar.xz
user $ tar tvJf *.tar.xz

Упаковать, распаковать, просмотреть содержимое tar архива:

user $ tar cvf *.tar path/to/folder
user $ tar xvf *.tar
user $ tar tvf *.tar

Команды bz2 и gz не могут применяться к директории, только к отдельным файлам. Кроме того исходный файл, после применения данных команд будет удален, т. е. при упаковке останется только архив, а при распаковке останется только распакованый файл.

Упаковать, распаковать bz2 архив (исходный файл удаляется):

user $ bzip2 some_faile some_faile.bz2
user $ bunzip2 *.bz2

Упаковать, распаковать gz архив (исходный файл удаляется):

user $ gzip some_faile some_faile.gz
user $ gunzip *.gz

Распаковка Z архива:

user $ uncompress *.Z

Распаковка rar архива:

user $ unrar x *.rar

Распаковка zip архива:

user $ unzip *.zip

Распаковка xz архива:

user $ unxz *.xz

Распаковка 7z архива:

user $ 7z x *.7z

Распаковка exe архива:

user $ cabextract *.exe

Используемые в командах ключи имеют следующее значение:
    c - создать архив;
    x - позволяет извлекать файлы из архива;
    v - делает вывод tar подробным. Это означает, что на экран будут выведены все найденные в архиве файлы (если эта опция опущена, информация, выводимая в процессе обработки, будет ограничена);
    f - (эта опция всегда идет последней в списке опций) является обязательной опцией для команды tar, без неё tar пытается использовать магнитную ленту вместо файла архива;
    z - позволяет вам обрабатывать архив, сжатый gzip'ом (с расширением .gz);
    j - позволяет вам обрабатывать архив, сжатый bzip2 (с расширением .bz2);
    J - позволяет вам обрабатывать архив, сжатый xz алгоритмом (с расширением .xz).

Для настоящих же сисадминов можно накарябать скрипт вроде приведенного ниже (скопипастен отсюда). Тогда можно будет распаковывать любой из описанных архивов одной командой. Этот код можно добавить в файл .bashrc в своей домашней директории.
File ~/.bashrc
unpack () {
  if [ -f $1 ] ; then
    case $1 in
      *.tar.bz2) tar xvjf $1    ;;
      *.tar.gz)  tar xvzf $1    ;;
      *.tar.xz)  tar xvJf $1    ;;
      *.bz2)     bunzip2 $1     ;;
      *.rar)     unrar x $1     ;;
      *.gz)      gunzip $1      ;;
      *.tar)     tar xvf $1     ;;
      *.tbz2)    tar xvjf $1    ;;
      *.tgz)     tar xvzf $1    ;;
      *.zip)     unzip $1       ;;
      *.Z)       uncompress $1  ;;
      *.7z)      7z x $1        ;;
      *.xz)      unxz $1        ;;
      *.exe)     cabextract $1  ;;
      *)         echo "\`$1': Unknown method of file compression" ;;
    esac
  else
    echo "\`$1' no foud"
  fi
}
Теперь для распаковки достаточно набрать:

user $ unpack  file

воскресенье, 5 января 2014 г.

Про оверлеи

Несмотря на то, что в основном репозитории Gentoo довольно много программ, наступает момент, когда нужной не находится. Но это не повод для уныния, почти наверняка нужная прога есть в сторонних оверлеях.

Оверлеи - это либо репозитории совместимых с Gentoo дистрибутивов, либо набор пакетов, поддерживаемых хорошим человеком, которые отсутствуют в основном дереве.

Вообще-то можно создать каталог для стороннего оверлея и вручную копировать туда ebuild-ы, поддерживая необходимую иерархию каталогов, но есть способ намного проще. Это команда layman. В Calculate она установлена по умолчанию, если же ее нет, то устанавливаем:

root # emerge app-portage/layman

Прописываем в /etc/make.conf строку (адрес можно подсмотреть в /etc/layman/layman.cfg):
File /etc/make.conf
source /var/lib/layman/make.conf
Теперь у нас есть мегапростой и мегаудобный способ для подключения сторонних репозиториев. Несколько наиболее употребительных примеров использования:
root # layman -L - выводит список доступных оверлеев (некоторые, помеченные красной звездочкой, недоступны для использования - обычно из-за неустановленой системы контроля версий, например subversion или mercurial);
root # layman -a rep_name - подключает оверлей rep_name;
root # layman -d rep_name - удаляет оверлей rep_name;
root # layman -l - выводит список подключенных оверлеев;
root # layman -S - обновляет все подключенные оверлеи

И еще одна полезная вещь - поиск по сторонним оверлеям. Для этого есть специальный сайт - gpo.zugaina.org.

понедельник, 16 декабря 2013 г.

И снова глюки fglrx

Установлена последняя доступная на сегодняшний день версия проприетарных драйверов AMD - ati-drivers-13.11_beta6. С завидной регулярностью (приблизительно, раз в день) экран КДЕ превращался в набор наложенных друг на друга треугольников разных размеров или даже превращался в набор полос при загрузке. Избавиться от этого можно было только перезапуском иксов.

Изучение логов показало, что драйвер fglrx ищет файл fglrx_dri.so в каталоге /usr/X11R6/lib64/modules/dri, а такого каталога вообще не существует. Файл же fglrx_dri.so был найден в каталоге /usr/lib64/dri.

Решение, конечно, костыльное, но какое есть. Просто создадим символическую ссылку из несуществующего пути на существующий. Недостающие каталоги создаем с помощью команды mkdir:

# mkdir /usr/X11R6 /usr/X11R6/lib64 /usr/X11R6/lib64/modules /usr/X11R6/lib64/modules/dri

# ln -s /usr/lib64/dri/fglrx_dri.so /usr/X11R6/lib64/modules/dri/fglrx_dri.so

Теперь, вроде как, все работает и ошибок в лог не сыпется.

воскресенье, 15 декабря 2013 г.

Windows 7 загрузочная флешка из под Linux

Если у вас возникла ситуация, когда на комп без дисковода нужно установить или  попрввить испорченую Windows 7, то эта заметка вам поможет. Здесь будет рассказано как сделать загрузочную флешку имея образ диска Windows 7, и сделать это из Linux. Все действия нужно производить из-под root.

Для начала нужно отформатировать флешку в NTFS. Если флешка определяется как /dev/sdb1, то имеем:

# mkfs.ntfs -f /dev/sdb1

Далее нам нужно скопировать файлы из образа винды на флешку. Но сначала примонтируем образ и саму флешку:

# mkdir /mnt/mustdie /mnt/flash
# mount -o loop mustdie7.iso /mnt/mustdie
# mount /dev/sdb1 /mnt/flash
# cp -r /mnt/mustdie/* /mnt/flash

где
    mustdie7 - образ Windows 7;
    /dev/sdb1 - флешка для записи образа.

И наконец самое главное - устанавливаем программу ms-sys, которая умеет создавать MBR на диске в стиле разных версий Windows. Установка для Gentoo:

# emerge sys-block/ms-sys
и записываем Windows 7 MBR на флешку:

# ms-sys -7 /dev/sdb

Всё. Теперь перезагружайтесь, выбирайте в БИОСе загрузку с usb-накопителя и ... Ну, вы меня поняли - винда мастдай.

воскресенье, 8 декабря 2013 г.

Автоматическая загрузка модулей ядра

После установки VirtualBox, столкнулся с проблемой запуска виртуальной машины. При запуске ВМ ругалась на незагруженный модуль ядра vboxdrv. Можно, конечно, загрузить модуль и вручную:

# modprobe vboxdrv

Но каждый раз делать так ручками, оказывается, лениво, да и модуль мониторинга температуры тоже автоматом не подключался. Поэтому встал вопрос: а как подгружать модули ядра при загрузке системы?

А нужно всего лишь отредактировать файл /etc/conf.d/modules

# nano /etc/conf.d/modules

и дописать в переменную modules требуемые модули ядра (vboxdrv и it87 в моем случае)

modules="vboxdrv it87"

суббота, 26 октября 2013 г.

Как разрезать avi видеофайл

Можно, конечно, воспользоваться каким-нибудь mencoder или другим навороченным кодеровщиком, но логика подсказывает, что данная операция не требует мощных инструментов кодирования/декодирования. И это действительно так.

Существует консольная утилита avisplit (из пакета transcode) специально предназначенная для того, чтобы разрезать файл на куски. Существует также и avimerge, предназначенная для обратной процедуры, но сейчас не об этом.

Например нам нужно разрезать файл kino.avi на части по 700 мегабайт для записи на CD.

$ avisplit -i ~/kino.avi -s 700

Здесь после -i идет имя файла для резки, а после -s - размер частей в мегабайтах.

Или нужно разрезать полторачасовой фильм на части продолжительностью 1 час и 30 минут:

$ avisplit -i ~/kino.avi -t 0:0:0.0-1:0:0.0,1:0:0.0-1:30:0.0

Временные интервалы задаются после опции -t, в форме t1-t2,t3-t4..., где t1,t2,t3,t4 - время в формате hh:mm:ss.ms (милисекунды можно не указывать).

Ну и конечно man avisplit в помощь.

вторник, 10 сентября 2013 г.

Рецепт решения ошибки компиляции ядра из-за bfq

При попытке установить очередное ядро (версии 3.10.9), компиляция прервалась с ошибкой:

make[1]: *** Нет правила для сборки цели `block/bfq-iosched.o', требуемой для `block/built-in.o'.  Останов.
make: *** [block] Ошибка 2


Решение нашлось довольно быстро и оказалось довольно простым. Эти самые правила для сборки находились не там, где должны быть. Поэтому переходим в каталог с исходниками ядра:

# cd /usr/src/linux-3.10.9-calculate/

И уже оттуда копируем нужные файлы в нужное место:

# cp b/block/bfq* block/

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

воскресенье, 11 августа 2013 г.

Черезмерное выделение памяти (overcommit)

Overcommit - стратегия выделения памяти, когда операционная система разрешает приложениям занимать больше виртуальной памяти, чем доступно в системе.

Сейчас в ядре два параметра, отвечающих за overcommit памяти:

vm.overcommit_memory (/proc/sys/vm/overcommit_memory) — отвечает за стратегию overcommit
vm.overcommit_ratio (/proc/sys/vm/overcommit_ratio) — отвечает за уровень в процентах overcommit

Стратегии у vm.overcommit_memory могут быть три:

OVERCOMMIT_ALWAYS (значение выставлено в 1) — ядро всегда удовлетворяет любые запросы на выделение памяти. Реально страницы памяти будут выделяться при первом обращении к ним.
OVERCOMMIT_GUESS (значение 0) — эвристический подход к распределению памяти. Используется по умолчанию, ибо подходит для большинства задач. Система будет отвергать только запросы, которые в принципе не могут быть удовлетворены, остальные — удовлетворять вне зависимости от наличия свободной памяти. На деле практически не отличим от OVERCOMMIT_ALWAYS.
OVERCOMMIT_NEVER (значение 2) — работа вообще без overcommit. Полный объём памяти, исходя из которого будут удовлетворяться или отвергаться запросы на выделение памяти, вычисляется как total_swap + total_ram * overcommit_ratio / 100. Значение параметра vm.overcommit_ratio имеет значение только при этой стратегии. Таким образом, при overcommit_ratio < 100, система всегда будет выделять память только если она подкреплена реальными страницами в ОЗУ или свопе. При overcommit_ratio > 100 мы получаем режим, схожий с OVERCOMMIT_GUESS, но с явно установленным «ограничителем».

Стоит заметить, что операционная система всегда резервирует около трех процентов памяти для процессов пользователя root.

Политики OVERCOMMIT_GUESS и OVERCOMMIT_ALWAYS приводит к ситуациям, когда суммарный размер виртуальной памяти приложений может намного превосходит реально имеющийся объем ОЗУ и свопа. В теории, когда реальная память заканчивается, в Linux срабатывает OOM Killer, убивающий лишние, самые «невыгодные» с точки зрения ядра, процессы. На практике же, OOM Killer отрабатывает далеко не всегда: система может уйти в длительный лаг или зависнуть.

Установим режим выделения памяти не больше, чем есть (OVERCOMMIT_NEVER), по умолчанию стоит выделять сколько запросит процесс (OVERCOMMIT_GUESS):

# sysctl vm.overcommit_memory=2
# sysctl vm.overcommit_ratio=80
Значение параметра vm.overcommit_ratio по-умолчанию равно 50. Чтобы изменения сохранились после перезагрузки пишем:

# echo 2 > /proc/sys/vm/overcommit_memory
# echo 80 > /proc/sys/vm/overcommit_ratio

Однако при этих параметрах появились случаи, когда браузер вдруг начинал дико свапироваться на диск, а потом обратно в память - система при этом сильно тормозила.