Tuesday

31 January, 2017

2GIS для Linux жив!

Когда-то, в ноябре 2014 года, разработчики «Дубльгиса» выпустили новенькую бета-версию своего справочника для Linux. Там был чистый интерфейс на Qt5 и QML, плавная работа, возможность скачать карту любого города России и некоторых других стран… Красота! Однако же, дальше беты дело не пошло, и вскоре сайт, посвящённый новой версии 2GIS, закрылся, а разработка перспективного справочника в формате ПК-версии была прекращена. Но репозиторий со сборками дубльгиса для Ubuntu продолжал жить, и он работает до сих пор. В openSUSE имеется несколько частных репозиториев с rpm-пакетами 2GIS. В подобном пакете, на самом деле, содержится не сама программа, а скрипт, который вытягивает deb-пакет из сети и перепаковывает его чем-то вроде alien. В openSUSE 13.2 и 42.1 такой трюк работал без сучка и задоринки, но уже в 42.2 программа перестала запускаться:

2gis0.png

Очевидно, что приложение, собранное под старую версию Ubuntu 14.04, уже не может запускаться в более новых версиях Linux. Забавно, что неосиляторы с Гиктаймса в подобной ситуации сдались ещё раньше: на этапе установки пакета. Однако я не первый раз запускаю проприетарный софт в Linux и знаю, что большинство подобных программ (XnRetro, Dropbox, Skype и т.п.) поставляются с собственным набором некоторых системных библиотек. Всегда можно попробовать удалить одну или несколько таких библиотек и посмотреть как программа попытается использовать общесистемные. Короче говоря, если избавиться от файла /usr/lib/2GIS/v4/lib/libpthread.so.0, то Дубльгис прекрасно запускается и работает:

2gis.png

 

 

KDE и перспективный формат FLIF

comparison

В номере №205 журнала Linux Format я писал о новом графическом формате FLIF (Free Lossless Image Format), который превосходит PNG и WebP по сжатию данных без потерь. В комплекте с исходным кодом FLIF (т.н. reference implementation) имеются библиотеки кодировщика и декодера, сам кодировщик, а также простейшее средство просмотра — консольная программа viewflif. С таким минимальным набором вполне можно работать, однако формат, по сути, в этом случае выполняет роль архиватора: ни листать, ни редактировать FLIF-файлы без предварительной конвертации нельзя. Правда, есть ещё набор консольных утилит ImageMagick, который с некоторых пор поддерживает формат FLIF. Приличных графических программ просмотра, которые были бы основаны на ImageMagick, в природе нет, к тому же, большинство готовых сборок ImageMagick собраны без поддержки FLIF и не могут его читать. Хотите поддержку — собирайте из исходного кода сами.

На этом фоне Qt FLIF Plugin оказался глотком свежего воздуха. Данная разработка сделана датским программистом Себастьяном Валем (Sebastian Wahl), который ведёт свой блог и увлекается алгоритмами сжатия изображений. Суть Qt FLIF Plugin проста: в вашем распоряжении появляется разделяемая библиотека libflif.so (не путать с одноимённой библиотекой из состава самого кодировщика FLIF!), которая может быть использована любыми Qt-приложениями, поддерживающими QImageIOPlugins, например Gwenview, Kolourpaint и многими другими. Автор плагина также написал свой собственный минималистичный просмотрщик графических файлов, вполне неплохой!

Итак, для сборки нам потребуется слегка подредактировать файл project.pro, добавив туда строку CONFIG += c++14:

flif1.png

Если этого не сделать, то проект просто не соберётся современными версиями GCC. Затем нужно убедиться в том, что заголовочные файлы FLIF лежат в нужном месте — между прочим, их нужно заранее вручную положить в /usr/include/FLIF:

flif2.png

Далее командуем make и ждём несколько секунд. Получившуюся библиотеку нужно проверить на успешную линковку с кодировщиком FLIF (дело в том, что плагин почему-то иногда не линкуется):

flif3.png

Дальше, нужно установить саму библиотеку, скопировать .desktop-файлы и зарегистрировать соответствующий тип файла для share MIME database. Следующие команды я выполнял из директории ~/qt_flif_plugin/configuraton:
sudo cp ../libflif.so /usr/lib64/qt5/plugins/imageformats/
sudo cp qimageioplugins/x-flif.desktop /usr/share/kservices5/qimageioplugins/
sudo cp imagethumbnail-flif.desktop /usr/share/kservices5/
sudo cp x-flif.xml /usr/share/mime/packages/
sudo /usr/bin/update-mime-database /usr/share/mime

Результат будет заметен сразу же. Во-первых, заработает генератор миниатюр в файловом менеджере Dolphin:

flif4.png

Во-вторых, можно будет смотреть FLIF-файлы в Gwenview, стандартной программе просмотра из набора KDE:

flif5.png

На данный момент можно использовать лишь версию Gwenview 16.08 или более старую, так как из-за этого коммита программа, начиная с версии 16.12, содержит другой механизм поддержки сторонних форматов. Но это уже вопрос к автор FLIF-плагина — надеюсь, он обновит свой код когда-нибудь. Меня же очень радует сжатие, которое обеспечивает FLIF. Только посмотрите:

flif6.png

 

Monday

9 January, 2017

openSUSE :: kernel of the day

suseДля тех, кто по той или иной причине хочет использовать последнюю версию ядра, но постоянно пересобирать ее вручную нет ни времени ни желания, openSUSE проект делает это за нас. Идея Kernel Of The Day – предоставить тестерам и прсто kernel инженерам последнюю git-версию ядра в виде RPM пакета. Это devel проект для ядра, в котором собираются версии для последующего тестирования и отправлки в tumbleweed. Делается это также с целью получить feedback от сообщества в виде bugreports или просто в ML/IRC.

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

Версия unstable, поэтому имеет смысл не перезаписывать каждый раз старое ядро, а добавлять новое. Это не работает автоматически. Для этого надо отредактировать /etc/zypp/zypp.conf. Добавьте две строчки:

multiversion = provides:multiversion(kernel)
multiversion.kernels = latest,running

Подробнее о multiple kernel.

Добавлю, что система ломатеся. Ломается достаточно часто. Только что, к примеру, у меня поломался dracut на ядре 4.9.0-2. Я не cмог загрузиться, т.к. он связан с LUKS, а я использую шифрование. Откатился назад на 4.8.13.
Интерсно, что именно сломано, почему и как починить. Это как раз ответ на вопрос “зачем мы этим занимаемся?”. Если бы этого не произошло, я вряд бы ли стал разбираться глубже в dracut. Проект таким способом предоставляет идеальную трейнинг площадку для энтузиастов, где обучение проходит в играющей форме 🙂

Wednesday

9 November, 2016

Скоро выйдут Fedora 25 и openSUSE 42.2

Релиз Fedora 25 запланирован на 15 ноября, а openSUSE 42.2 — на день позже. На самом деле, оба этих дистрибутива я тестирую уже около месяца, установив ещё бета-версии. У меня есть некоторые наблюдения, которыми я хочу поделиться.

Fedora

25

Это очень достойный и довольно стабильный дистрибутив, который прекрасно подойдёт для домашнего использования, если вы возьмёте не официальную версию, а сборку от проекта Russian Fedora — в ней уже добавлены дополнительные репозитории, кодеки и прочие штуки, которые в обычной Федоре нужно проделывать вручную. Даже если вы не собираетесь использовать Федору как основную систему, её всегда полезно иметь где-нибудь под рукой (в виртуальной машине или на отдельном жёстком диске/разделе), потому что Федора — это всегда самая новая версия рабочего стола Gnome, передовая и самая стабильная работа новой графической системы Wayland, надёжная и стабильная поддержка UEFI и Secureboot в инсталляторе, огромный выбор стороннего ПО через систему Fedora Copr и многое другое.

Вместе с тем, пользоваться Fedora 25 Beta как основной системой затруднительно, потому что многие проекты в Copr пока не делают сборок для версии 25, многие инструменты, вроде Fedy, тоже пока поддерживают только версии Fedora вплоть до 24-й. Короче говоря, надо просто немного подождать.

В середине октября моя Russian Fedora 25 Beta вдруг перестала обновляться и вообще видеть сервера обновлений. Я догадался заглянуть на страницу состояния инфраструктуры Федоры и увидел там много красного цвета. Инфраструктура всего проекта «лежала» примерно 2 часа по вине урагана «Матфей», который вызвал наводнения и обрыв электропередач в местечке Raleigh, где и расположен дата-центр Fedora Project. Казалось бы, Fedora умеет искать местные зеркала своих репозиториев во всех частях мира, однако сам список зеркал всё равно сначала подтягивается из США. Так что при использовании стандартных настроек пакетного менеджера DNF, работоспособность Russian Fedora всё равно критично зависит от американских серверов.

openSUSE

plasma-5-8-widgets

Предыдущий релиз 42.1 мне откровенно не понравился — он был очень «сырым» и стал более-менее хорошим только через пару-тройку месяцев, когда большинство проблем разработчики наконец решили. Я использую openSUSE ещё со времён версии 10.2 и могу сказать, что за прошедшее время было много как хороших, так и неудачных релизов —  в этом смысле проект openSUSE остаётся непредсказуемым. Правы были те пользователи, которые не стали обновляться до Leap 42.1 и остались на отличных версиях 13.1 и 13.2. Но похоже, что грядущий выпуск 42.2 получится исключительно удачным. За месяц активного использования я остался очень доволен качеством и производительностью системы. Пожалуй, стоит перечислить достоинства и некоторые выявленные недостатки в openSUSE 42.2.

Достоинства:

  • Традиционно лучший инсталлятор из виденных мною. Логичный, удобный, стабильный — оно и не мудрено, ведь готовили его изначально для платной версии SUSE SLE:
  • Приятный в использовании и очень производительный рабочий стол Plasma5;
  • Огромный набор дополнительного ПО в системе openSUSE Build Service (OBS). Здесь много энтузиастов из сообщества openSUSE поддерживают свои сборки пакетов, и тут есть практически всё;
  • Пакетный менеджер Zypper, который, на мой взгляд, гораздо мощнее любого apt или urpm*. На моей практике мне удавалось легко и изящно откатывать систему к предыдущему состоянию после обновления из «левых» репозиториев, используя Zypper. Сломать пакетную систему в openSUSE практически нереально — даже загубленную систему всегда можно вернуть в строй, вычистив её от ненужных наслоений;
  • Интересные возможности бэкапа и версионирования системы благодаря файловой системе Btrfs. В последний раз я тестировал Btrfs ещё с openSUSE 13.1, и тогда меня неприятно удивила низкая производительность этой ФС на десктопе. С тех пор я всегда форматировал корневой раздел для openSUSE в ext4, но недавно я решил поставить 42.2 RC на отдельный жёсткий диск и оставил в инсталляторе настройки по умолчанию — они-то и предлагают всегда Btrfs. В итоге, установленная система показалась мне очень быстрой, и теперь мне больше не хочется менять Btrfs на ext4. Кстати, недавние тесты показывают, что Btrfs не так уж и отстаёт от конкуренток;
  • Самый удобный способ установки обновлений, что я когда-либо видел. В системном лотке Plasma5 сидит значок обновлений, который подаёт сигнал о новых версиях пакетов. Достаточно всего двух щелчков мыши — и обновления тут же скачиваются и устанавливаются!

Недостатки:

По мелочи всегда набираются ошибки, которые хоть и не сильно влияют на общее впечатления о системе, но раздражают. Так, при выходе (log out) из Plasma5 эта самая Плазма сначала замирает на пару секунд, потом с ошибкой перезапускается, и лишь после этого сеанс завершается. Есть надежда, что это исправят в ближайших выпусках Plasma 5.8.х, так что нужно просто подождать обновлений. В остальном, некоторые программы всё равно приходится собирать вручную (KEncFS, KNemo), но их немного. Русификация Plasma5 в целом на «четвёрку» — чуть похуже чем в Rosa Fresh, но мелкие огрехи не сильно портят жизнь.

Самое главное — openSUSE 42.2 ещё до своего выхода оказался очень стабильным и пригодным для использования дистрибутивом, который я могу рекомендовать всем, кто интересуется Linux.

Sunday

17 July, 2016

Linux Kernel 4.7 Update for openSUSE

Пару дней назад вышло ядро 4.7. В связи с этим наш репозиторий Tumbleweed в скором будущем будет обновлен. Для тех же, кому по той или иной причине нужны самые свежие версии ядер, собраные для openSUSE (не только Tumbleweed), существует специальный kernel-репозиторий. Там лежат ядра, собранные сразу же после официального релиза (в тот же день). Доступны сборки не только для x86, но и для ARM и Power. Есть vanilla.

Установка не предствляет из себя ничего сложного – самое обычное обновление rpm-пакета.
Я только что обновил ядро на одной из своих тестовых систем. Это 32-битный x86 нетбук c установленной (где-то в середине июня) Tumbleweed.

# uname -pr
4.6.2-1-pae i686

# zypper ar -f http://download.opensuse.org/repositories/Kernel:/HEAD/standard/Kernel:HEAD.repo                                                               
Adding repository 'Kernel builds for branch master (standard)' ...............................[done]
Repository 'Kernel builds for branch master (standard)' successfully added                                                                                                         
Enabled     : Yes                                                                                                                                                                  
Autorefresh : Yes                                                             
GPG Check   : Yes                                                             
Priority    : 99                                                              
URI         : http://download.opensuse.org/repositories/Kernel:/HEAD/standard/


# zypper lr
# | Alias               | Name                                       | Enabled | GPG Check | Refresh
--+---------------------+--------------------------------------------+---------+-----------+--------
1 | Kernel_HEAD         | Kernel builds for branch master (standard) | Yes     | ( p) Yes  | Yes    
2 | openSUSE-20160613-0 | openSUSE-20160613-0                        | No      | ----      | Yes    
3 | packman             | packman                                    | Yes     | (r ) Yes  | Yes    
4 | repo-debug          | openSUSE-Tumbleweed-Debug                  | No      | ----      | Yes    
5 | repo-non-oss        | openSUSE-Tumbleweed-Non-Oss                | Yes     | (r ) Yes  | Yes    
6 | repo-oss            | openSUSE-Tumbleweed-Oss                    | Yes     | (r ) Yes  | Yes    
7 | repo-source         | openSUSE-Tumbleweed-Source                 | No      | ----      | Yes    
8 | repo-update         | openSUSE-Tumbleweed-Update                 | Yes     | (r ) Yes  | Yes

Значит новый репозиторий называется Kernel_HEAD. Хорошо, я хочу обновиться только из него:

# zypper dup -r Kernel_HEAD
Retrieving repository 'Kernel builds for branch master (standard)' metadata --------------------[\]

New repository or package signing key received:

  Repository:       Kernel builds for branch master (standard)    
  Key Name:         Kernel OBS Project 
  Key Fingerprint:  4529410A B52F94C4 03BAB484 ECEEF210 03579C1D  
  Key Created:      Mi 22 Apr 2015 14:25:51 CEST                  
  Key Expires:      Fr 30 Jun 2017 14:25:51 CEST                  
  Rpm Name:         gpg-pubkey-03579c1d-5537934f                  


Do you want to reject the key, trust temporarily, or trust always? [r/t/a/? shows all options] (r): a
Retrieving repository 'Kernel builds for branch master (standard)' metadata ...................[done]
Building repository 'Kernel builds for branch master (standard)' cache ........................[done]
Loading repository data...
Reading installed packages...
Computing distribution upgrade...

The following 2 NEW packages are going to be installed:
  kernel-default-4.7.rc7-2.1.g152f160 kernel-pae-4.7.0-1.1.g24f30d5

The following 2 packages are going to be upgraded:
  kernel-firmware ucode-amd

The following 2 packages are going to change vendor:
  kernel-firmware  openSUSE -> obs://build.opensuse.org/Kernel
  ucode-amd        openSUSE -> obs://build.opensuse.org/Kernel


2 packages to upgrade, 2 new, 2  to change vendor.
Overall download size: 156.5 MiB. Already cached: 0 B.
After the operation, additional 372.8 MiB will be used.
Continue? [y/n/? shows all options] (y): y

После установки просто перезагружаемся и наслаждаемся работой нового ядра.

> uname -pr
4.7.0-1.g24f30d5-pae i686

Обновляя ядра, вы не только становитесь привлекательнее для девушек, но и помогаете проекту в качестве beta-тестера. Помните, что Tumbleweed это не самое-самое свежее ПО. Это коллекция уже протестированных вместе компонентов.
“Стоит ли мне учавстовать в этом? А вдруг я себе что-то сломаю?”, – подумает ленивец. Нет, вероятность того, что произойдет креш системы очень мал. Прежде чем ядро официально выпустят, оно пройдет серию тестов.
Если креш все же произошел, всегда можно загрузить старое ядро, в котором вы работали прежде (и где все работало). В этом случае вы очень поможете, если не поленитесь сообщить нам о возникшей проблеме.
Посмотреть список установленных ядер можно вот так:

# zypper se -si 'kernel*'
Loading repository data...
Reading installed packages...

S | Name            | Type    | Version              | Arch   | Repository                                
--+-----------------+---------+----------------------+--------+---------------------------------------
i | kernel-default  | package | 4.6.2-1.2            | i586   | (System Packages)                         
i | kernel-default  | package | 4.7.rc7-2.1.g152f160 | i586   | Kernel builds for branch master 
i | kernel-firmware | package | 20160712-137.1       | noarch | Kernel builds for branch master 
i | kernel-pae      | package | 4.6.2-1.2            | i686   | (System Packages)                         
i | kernel-pae      | package | 4.7.0-1.1.g24f30d5   | i686   | Kernel builds for branch master 

Как видете, старое ядро никуда не делось. Я отправляю всех интересующихся к 12 главе нашего руководства. Там описана Multiple Kernel магия для zypper.

Обновившись, я протестировал сейчас, к примеру, LUKS и совместимость с проприетарным broadcom модулем для wireless. Все работает как и прежде, значит я иду дальше – перехожу к обновлению на своих ARM embedded-системах, чтобы удостовериться, что и там все работает как надо. Счастливо 😉

Wednesday

13 July, 2016

aarch64: SoftIron Overdrive 1000

24 июня, во время openSUSE Conference 2016, Norman Fraser (Chief Executive Officer из компании SoftIron Ltd.) представил новую aarch64 серверную out-of-the-box систему. Overdrive 1000 привлек внимание многих и не только потому, что она продается с предустановленной openSUSE. По словам Нормана, это тчательно продуманная 64-битная ARM® developer-система с AMD Opteron A1100™ процессором. Многие разработчики хотят больше, чем могут предложить обычные development-board embedded системы. Все помнят обсуждение ARM как десктопной архитектуры после LinuxCon Europe в конце прошлого года.
Overdrive 1000Overdrive 1000 продается с openSUSE Leap 42.1, где уже установленны Apache Web-сервер, MySQL, PHP, Xen, KVM, Docker и openJDK. Таким образом, пользователи могут приступать к работе сразу же после загрузки ОС. Напомню, что для aarch64 существуют установочные образу практически для всех известных дистрибутивов. Пользователи tumbleweed, к примеру, могут скачать установочные образы отсюда.

Overdrive 1000 стоит всего $599. За эти деньги мы получаем:

  • Processor cores 4 x 64-bit ARM Cortex A57 Cores
  • 2 x RDIMM with 8GB DDR4 DRAM (можно увеличить до 64 GB)
  • 1 x 1GBase-T Ethernet
  • 2 x USB 3.0 ports
  • 2 x SATA 3.0 ports
  • 1 x 1TB HDD
  • Wirespeed 1Gbps throughput
  • Low and predictable energy consumption at 45 watts max

Собираюсь ли я заказывать эту систему? Однозначно ДА! Docker уже поддерживает aarch64 (раз, два), а это был пожалуй единственный вопрос, который меня беспокоил. Пока я работал только с 32-битными ARM системами, пора переходить на 64 😉

Tuesday

12 July, 2016

openSUSE :: adding static routes in NM

Новичков в openSUSE вводит в заблуждение настройка сети из-за того, что для её управления существует несколько независимых технологий. В openSUSE Tumbleweed сегодня используется NetworkManager и wicked. Первый используется по умолчанию. Если же вам, к примеру, понадобится добавить статический маршрут и вы спросите об этом гугл, скорее всего в первую очередь вы найтдете классический способ сделать это. Помние, этот способ не сработает, если вы используете NM, и наоборот. Также не стоит забывать, что настройки сети в разных дистрибутивах могут отличаться.

Добавить маршрут можно с помощью команды route. В данном примере для доступа в сеть 172.19.0.0/16 я использую рутер 172.20.1.161. Тут стоит помнить лишь о том, что эти настройки пропадут после перезагрузки.

# route add -net 172.19.0.0 netmask 255.255.0.0 gw 172.20.1.161

Чтобы настройки не пропали, нужно прописать их в конфиге NM. Для каждого соединения существуют свои настройки. Загляните в каталог /etc/NetworkManager/system-connections. Там находится список файлов, каждый из которых относиться к тому или иному соединению. Чтобы добавить route правило, о котором я говорил выше, просто добавьте такую строчку в секцию [ipv4]:

route0=172.19.0.0/16;172.20.1.161

Если вы используете KDE Workspace, вы можете добавить эти настройки в KDE NM-апплете. Для этого просто правый клик на иконке, выбираем “Configure Network Connections…”
configure network connections...
Появляется список соедининий. Выбираем нужное нам, нажимаем “Edit”. В появившемся окне переходим во вкладку IPv4 и там нажимаем “Routes…”, где можно добавить новые или удалить старые маршруты.
KDE NM route

Sunday

22 May, 2016

Create a Live USB stick using Windows — вариант перевода

Эта страница объясняет, как создать загрузочный USB-брелок из LiveDVD, или другими словами — LiveUSB.
Версия: 12.2+Это относится к openSUSE, начиная с версии 12.2 и выше.
Внимание: Не пытайтесь применять процедуры, найденные в интернете для других дистрибутивов «конвертировать образ для создания liveUSB». Таким способом Вы повредите образ. Образы openSUSE уже подготовлены для использования на USB-брелоке, никаких изменение делать не нужно.

С помощью ImageUSB

Загрузите ImageUSB и следуйте инструкциям на их странице.

С помощью SUSE Studio ImageWriter

Ранее использовался SUSE Studio ImageWriter компилированный для windows, но он не поддерживается в настоящее время. Вы можете беспрепятственно fork it и создать свою собственную версию для windows.

С помощью GRUB4DOS

GRUB4DOS может быть установлен, используя RMPrepUSB

Этот метод позволяет сохранить все данные на вашем USB-устройстве. Демонстрация предоставляется на this video. Note: Эти инструкции не подходят, если ваш компьютер загружается UEFI (большинство компьютеров, созданных в промежутке ~2011-2016 все компьютеры с предустановленной Windows 8/8.1/10); сначала Вы должны запустить BIOS, сделать доступной Legacy-загрузку (т.е. сделать недоступными опции загрузки UEFI/secure)!

  • Скопируйте ISO-образ в папку «boot» на Вашем USB-flash.
  • Извлеките файлы «initrd» and «linux» в папку «boot» на USB-устройстве. Эти файлы размещены в каталогах boot\i386\loader или boot\x86_64\loader ISO-образа. Для монтирования ISO Вы можете использовать, например, Pismo File Mount Audit Package.
  • Установка GRUB4DOS в MBR или на USB-flash:
    1. download RMPrepUSB and install it;
    2. запустите RMPrepUSB;
    3. выберите Ваш носитель;
    4. нажмите «Install GRUB4DOS»;
    5. подтвердите GRUB installation to MBR;
    6. подтвердите установку GRUB на выбранный носитель;
    7. подтвердите копирование GRLDR на выбранный носитель.
  • Создайте файл «menu.lst» в корневой папке на USB key. Содержимое «menu.lst» должно быть таким (замените в двух местах – в строке 2 and в строке 5 openSUSE.iso на имя файла образа вашей устанавливаемой системы):
timeout 10

title openSUSE.iso
uuid () > nul
set UUID=%?%
set ISO=openSUSE.iso
kernel /boot/linux isofrom=/dev/disk/by-uuid/%UUID%:/boot/%ISO% isofrom_device=/dev/disk/by-uuid/%UUID% isofrom_system=/boot/%ISO% loader=syslinux splash=silent quiet
initrd /boot/initrd

Загрузите компьютер с вашей USB.

Решение проблем

Если у вас существуют проблемы с записью на USB-флеш, вы можете отформатировать устройство в Windows для подготовки записи образа.

Ms Windows Partitioning Tool

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

C:\> diskpart
DISKPART> list disk           «--- напечатать список дисков
DISKPART> select disk 0       «--- выбрать номер диска
DISKPART> list partition      «--- напечатать список разделов
DISKPART> select partition 1  «--- выбрать первый раздел
DISKPART> active              «--- сделать активным диск/раздел (bootable)
DISKPART> exit                «--- выход

В отличие от fdisk-а, diskpart применит изменения сразу же после того, как вы их внесете, следовательно, не нужны команды на запись.

Saturday

16 January, 2016

openSUSE :: MySQL & Ruby

Наконец-таки нашел немного времени для знакомства с Ruby. Присматривался к нему уже наверное лет 5. Сначала SUSE стала создавать свои web сервисы на Ruby, потом вышел WebYaST… Что связанно с SUSE, Ruby исползуется повсеместно. Наконец и YaST был переписан на Ruby, а это значит, что openSUSE стал первым дистрибутивом, где установщик полностью написан на этом языке. Сегодня его просто нельзя уже игнорировать. Итак, я собираюсь начать восхождение как можно быстрее. Вы со мной? 🙂

Я покажу, что Leap 42.1 прекрасно подходит для изучения Ruby. В качестве примера рассмотрим работу с MySQL (на работе мне постоянно приходится писать автономные программы, поведение которых зависит от данных в БД); что-нибудь самое простое.

Если вы уже работали с БД, к примеру, в Python или Lisp, то приведенный ниже код поймете сразу. Require подключает модуль mysql. Мы создаем mysql-объект con. С помошью его метода query создаем SQL-запрос. Пробегаемся по выводу при помощи each do, при этом каждой строке из вывода присваиваем имя row. Я использую puts для вывода информации на экран. В Ruby есть и всем известный print. Разница в том, что puts добавляет символ новой строки в конец вывода, а вот print этого не делает. 14-16 строки обрабатывают ошибку (показывают ее вывод, но программа продолжает работу), если такая возникнет при попытке соединиться и получить данные. В конце мы вызываем close, который закрывает соединине.

#!/usr/bin/ruby
require 'mysql'

begin
    con = Mysql::new('10.10.10.10',
                     'login',
                     'password',
                     'centreon')

    con.query('SHOW columns FROM nagios_server').each do |row|
         puts "#{row[0]} #{row[1]} #{row[2]} #{row[3]}"
    end

    rescue Mysql::Error => e
        puts e.errno
        puts e.error
    ensure
        con.close if con
end

При первом запуске (используем свежую Leap 42.1 x86_64) получаем ошибку:

> ./mysql-test.rb
/usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55: \
                   in `require': cannot load such file -- mysql (LoadError)
        from /usr/lib64/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from ./mysql-test.rb:2:in `'

Тут все понятно: require не может найти mysql. Для установки воспользуемся gem. Это аналог Lisp’овского QuickLisp или Python’овского pip.

> gem --help
RubyGems is a sophisticated package manager for Ruby.  This is a
basic help message containing pointers to more information.

  Usage:
    gem -h/--help
    gem -v/--version
    gem command [arguments...] [options...]

  Examples:
    gem install rake
    gem list --local
    gem build package.gemspec
    gem help install

  Further help:
    gem help commands            list all 'gem' commands
    gem help examples            show some examples of usage
    gem help platforms           show information about platforms
    gem help                     show help on COMMAND
                                   (e.g. 'gem help install')
    gem server                   present a web page at
                                 http://localhost:8808/
                                 with info about installed gems
  Further information:
    http://guides.rubygems.org

> gem list --local mysql

*** LOCAL GEMS ***


>

Нет ни одной установленной в системе mysql gem.
Обратите внимание на вывод gem’овской help – для команды list сказано только по поводу –local аргумента. Там есть еще –remote. Последний покажет доступные для установки gem’ы. Я не привожу тут вывод, потому что список слишком большой.
Для установки воспользуемся командой install:

# gem install mysql
Fetching: mysql-2.9.1.gem (100%)
Building native extensions.  This could take a while...
                 
ERROR:  Error installing mysql:
ERROR: Failed to build gem native extension.
/usr/bin/ruby.ruby2.1 extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib64/ruby/include/ruby.h
extconf failed, exit code 1 

Gem files will remain installed in
/usr/lib64/ruby/gems/2.1.0/gems/mysql-2.9.1 for inspection.
Results logged to
/usr/lib64/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0/mysql-2.9.1/gem_make.out 

И я вам скажу честно – так происходит со многоими gem’ами 🙂

Но на самом деле ничего страшного не случилось. Дело в том, что gem’у нужен файл из RPM-пакета. Какого-то RPM пакета… Вызывать zypper нам придется самим. Какой пакет устанавливать? Мне повезло, я вспомнил, что один RPM-пакет нужно было доустановить и в случае с Common Lisp. В том случае это был libmysqlclient, для Ruby же нужен libmysqlclient-devel. Очень рекомендую еще поставить пакет ruby-devel и весь pattern devel_basis. Там много библиотек, необходимых интерпретору.

> sudo zypper in -t pattern devel_basis
> sudo zypper in ruby-devel libmysqlclient-devel

После этого попытаемся установить mysql gem снова:

> gem install mysql
Building native extensions.  This could take a while...
Successfully installed mysql-2.9.1
Parsing documentation for mysql-2.9.1
Installing ri documentation for mysql-2.9.1
Done installing documentation for mysql after 0 seconds
1 gem installed

> echo $?
0

> gem list --local mysql

*** LOCAL GEMS ***

mysql (2.9.1)

Выглядит лучше, правда? Теперь вернемся к коду выше. Придумайте для теста какой-нибудь простой SQL запрос. Что-нибудь типа show tables, к примеру. Вывод скрипта, приведенного выше, выглядит так:

./mysql-test.rb
id int(11) NO PRI
name varchar(40) YES 
localhost enum('0','1') YES 
is_default int(11) YES 
last_restart int(11) YES 
ns_ip_address varchar(255) YES 
ns_activate enum('1','0') YES 
ns_status enum('0','1','2','3','4') YES 
init_script varchar(255) YES 
monitoring_engine varchar(20) YES 
nagios_bin varchar(255) YES 
nagiostats_bin varchar(255) YES 
nagios_perfdata varchar(255) YES 
centreonbroker_cfg_path varchar(255) YES 
centreonbroker_module_path varchar(255) YES 
centreonconnector_path varchar(255) YES 
ssh_port int(11) YES 
ssh_private_key varchar(255) YES 
init_script_snmptt varchar(255) YES 

Для сравнения, вот так выглядит вывод нашего SQL запроса в mysql(1):

> SHOW columns FROM nagios_server;
+----------------------------+---------------------------+------+-----+---------+
| Field                      | Type                      | Null | Key | Default |
+----------------------------+---------------------------+------+-----+---------+
| id                         | int(11)                   | NO   | PRI | NULL    |
| name                       | varchar(40)               | YES  |     | NULL    |
| localhost                  | enum('0','1')             | YES  |     | NULL    |
| is_default                 | int(11)                   | YES  |     | 0       |
| last_restart               | int(11)                   | YES  |     | NULL    |
| ns_ip_address              | varchar(255)              | YES  |     | NULL    |
| ns_activate                | enum('1','0')             | YES  |     | 1       |
| ns_status                  | enum('0','1','2','3','4') | YES  |     | 0       |                         
| init_script                | varchar(255)              | YES  |     | NULL    |                              
| monitoring_engine          | varchar(20)               | YES  |     | NULL    |                
| nagios_bin                 | varchar(255)              | YES  |     | NULL    |                    
| nagiostats_bin             | varchar(255)              | YES  |     | NULL    |                                 
| nagios_perfdata            | varchar(255)              | YES  |     | NULL    |                                  
| centreonbroker_cfg_path    | varchar(255)              | YES  |     | NULL    |                                          
| centreonbroker_module_path | varchar(255)              | YES  |     | NULL    |                                  
| centreonconnector_path     | varchar(255)              | YES  |     | NULL    |                                   
| ssh_port                   | int(11)                   | YES  |     | NULL    |                                           
| ssh_private_key            | varchar(255)              | YES  |     | NULL    |                              
| init_script_snmptt         | varchar(255)              | YES  |     | NULL    |                                              
+----------------------------+---------------------------+------+-----+---------+
19 rows in set (0.00 sec)

Вот так выглядит мой первый шаг изучения Ruby. После опробывания парочки других библиотек (например SNMP, threading или SMTP), нужно браться за изучения типов данных. Это основа языка. Если приницип работы библиотек практически 1:1 как и в Python, то к отличиям типов данных стоит отнестись серьезнее. Еще меня интересует стиль языка, а именно функциональная парадигма. Ходят слухи, что на нем легче писать функциональный код, чем на python. В этом мне еще только придется убедиться.

На последок скажу, что открытой документации по Ruby очень много. Все больше и больше документации появляется сейчас и на русском. Удачи в изучении. Счастливо 😉

Tuesday

12 January, 2016

Некоторые исправления для OpenSUSE 42.1

1. При загрузке ядра система зависает намертво и… через 20 минут всё таки грузится. В 13.2 наблюдал такое на ядре kernel-desktop и лечил это тогда переходом на kernel-default. В OpenSUSE 42.1 нет в образе такого выбора ядер, а новый kernel-default стал зависать при загрузке именно так. Решение нашлось очень простое: к параметрам загрузки ядра нужно добавить dis_ucode_ldr. Нашёл тут.

2. На некоторых машинах система время от времени зависает сама и без видимых причин. В dmesg такое:

[   35.962355] systemd-journald[525]: File /var/log/journal/fde0e1438648364a342657f95654294e/user-1000.journal corrupted or uncleanly shut down, renaming and replacing.

Заметил, что проблема имеется только тогда, когда /var примонтирован на отдельном разделе (именно так предлагается по умолчанию при установке 42.1). Удалось вылечить следующим образом:

su -
rm -rf /var/log/*
systemctl daemon-reload
reboot

Из того, что пока не удалось починить:

  1. При обновлении/установки ядра, создание initrd и обновление загрузчика занимает очень много времени (у меня — 40 минут). Опять же — только на некоторых конфигурациях, когда в системе определённое сочетание дисков с MBR и GPT.
  2. В Plasma 5 полная неразбериха в системном лотке. К тому же так и не починено отображение значка Dropbox. Xembed-sni-proxy не помогает.

В целом, OpenSUSE 42.1 — один из самых глючных и небрежно сделанных релизов OpenSUSE, что, безусловно, расстраивает. Я рассчитывал на качественную сборку KDE Plasma 5, но пока получается, что лучше всего Plasma 5 собрана в Rosa Desktop Fresh R6. Кстати, свежий образ системы «на посмотреть» можно взять тут.