Skip to content

Latest commit

 

History

History
1740 lines (1329 loc) · 83.1 KB

File metadata and controls

1740 lines (1329 loc) · 83.1 KB

OpenSuse

Данный мануал является частью проекта Sysscripts; тут я рассказываю об особенностях платформы OpenSuse, а так же сборки Qt

Данный документ сфокусирован на процессе портирования некоторого ПО со старого Slackware 7.0, или иной операционной системы конца 90-х годов, на OpenSUSE последней версии.

Официальный Telegramm канал поддержки OpenSUSE.

Оглавление

Вступление

В давние времена первые релизы предка OpenSUSE разрабатывалась компанией Gesellschaft für Software- und System-Entwicklung, от сюда аббревиатура S.u.S.E.

У OpenSUSE есть два основных дистрибутива:

  • Leap - что означает - Рывок
  • Tumbleweed - что означает Перекатиполе

LeapAndTumbleweed

Tumbleweed во многом, это alfa версия Leap, однако вместе с этим именно Tumbleweed считается той самой, для разработчиков. Основное отличие это подход к версионности. У Leap это стандартная LTS (Long time support) модель версий. Шаблон версий Leap: major.minor. Tumbleweed основан на непрерывном распространении релизов (Rolling release). Фактически CI/CD от компьютера разработчика дестрибутива до компьютера пользователя. Шаблон версий Tumbleweed: yyyymmdd.

Стоит предположить, что в качестве среды для станции разработчика мы будем использовать Tumbleweed, а как среду рабочей АПК (аппаратно програмного комплекса) или сервера - LEAP.

При установке Tumbleweed вы то и дело будете сталкиваться с некоторыми неполадками. Часто обновление системы командой sudo zypper update решает эти проблемы. Обновляйте систему каждый день.

В данном документе переменные среды приводятся без знака $, к примеру: CV_REF.

Меры объёма памяти

В процессе работы вам придётся столкнуться с переводом между десятичными и двоичными размерностями объёма памяти. Ниже я привожу таблицу, которая поможет вам с переводом между единицами:

Десятичная приставка

Название Символ Степень
Килобайт kB $10^3$
Мегабайт Mb $10^3$
Гигабайт Gb $10^3$
Терабайт Tb $10^3$
Петабайт Pb $10^3$
Эксабайт Eb $10^3$
Зеттабайт Zb $10^3$
Йотабайт Yb $10^3$

Каждая следующая размерность в $1000$ раз больше предыдущей, к примеру $6$ Gb это $6000$ Mb

Двоичная приставка

Название Символ Степень
Килобайт KiB $2^{10}$
Мегабайт Mib $2^{20}$
Гигабайт Gib $2^{30}$
Терабайт Tib $2^{40}$
Петабайт Pib $2^{50}$
Эксабайт Eib $2^{60}$
Зеттабайт Zib $2^{70}$
Йотабайт Yib $2^{80}$

Каждая следующая размерность в $1024$ раза больше предыдущей, к примеру $6$ Gib это $6144$ Mib

Версионность

Далее фиксации последних рабочих состояний операционной системы:

Среда OpenSUSE Версия
Разработка Tumbleweed 20240304
АПК Leap 15.5

Физические ресурсы

На базовом этапе мы располагаем следующими физическими ресурсами:

Tumbleweed Leap
Motherboard MSI H110M PRO-VD ChWay Sherman J 5.0
RAM 3.7 Gi 1.7 Gb
Disk 400 Gb 26 Gb
CPU Intell Pentium G4600 Intel Celeron J1900
Frequency 3.60GHz 1.99GHz
Cores 4 4

Установка системы

Для разворачивания сервера или среды рабочей станции, вам необходимо установить и настроить ОС OpenSuse Tumbleweed или OpenSuse Leap. Вы можете скачать образ с официального сайта. Offline образ качается резвычайно долго, следовательно используйте Online способ установки.

Tumbleweed LiveUSB

Tumbleweed последнее время крайне не стабилен, используйте Leap LiveUSB, аналогично сказанному ниже, пролистнице до последней странице, и скачайте образ openSUSE-Leap-15.6-XFCE-Live-x86_64-Media.iso

Вам очень пригодится Tumbleweed LiveUSB для решения разных проблем, к примеру увеличение пространства для Swap в случае, если при установке оно не было достаточно выделено. Разумеется вы сможете использовать Tumbleweed LiveUSB для работы с любой усановкой: и собственно говоря Tumbleweed и Leap и иной операционной системой.

На странице образов Tumbleweed на последних страницах найдите и скачайте файл openSUSE-Tumbleweed-XFCE-Live-x86_64-Current.iso. Запишите его на Flash USB устройство знакомой нам командой dd. При установке дополнительного ПО, к примеру Gparted, пакеты остануться на флешке. Вам не придётся качать нужные архивы каждый раз.

Подготовка дискового пространства

Допустим вы уже имеете достаточно старую систему расположенную на существующем диске. Вы залили её ранее обычным dd с помощью Clonezilla, как указано тут. Пусть это будет предок OpenSUSE - Slackware 7.0. Допустим дисковое пространство представлено следующим образом:

/dev/sda1 500 Mb
/dev/sda2 30 Gb

Вы до сих пор пользуетесь старой системой, и хотели бы расширить её дисковое пространство. Это лучше сделать сейчас, так как после разметки диска под OpenSUSE это будет опасно и трудоёмко.

Вы загрузились с Tumbleweed LiveUSB, запустили Gparted, но система не даёт вам изменить размер тома /dev/sda. Вы могли бы создать том /dev/sda3 немного дальше, но какие то силы заставляют вас всё же загрузить старый дистрибутив, и заняться древней магией вручную. Итак, ручное увеличение пространства диска:

  1. Загрузите Slackware
  2. Изучаем топологию дисков с помощью lsblk
    1. /dev/sda1 занимает всего 500 Mb
    2. Slackware располагается на /dev/sda2 на двух логических томах
      1. На первом ОС
      2. На втором файл подкачки (Swap)
    3. Иных разделов у нас пока нет
  3. Изучаем типы разделов с помощью команды parted /dev/sda
    1. Печатаем таблицу разделов с помощью команды print
    2. Убеждаемся что оба раздела основные (primary)
  4. Запускаем fdisk /dev/sda -u=cylinders в режиме геометрии цилиндров
    1. Печатаем таблицу разделов с помощью команды print
    2. Наблюдаем, что на /dev/sda1 располагается загрузочная область
    3. Создаём новый раздел расчитывая цилиндры
      1. Сейчас для Slackware имеется 30 Gb
      2. Расширяем пространство для Slackware ещё на 30 Gb
      3. Вычисляем ближайшее число используя степени двойки
      4. 2^36 = 68719476736
      5. Расширяем физический диск, логический расширим при необходимости
      6. Ищем сколько в цилиндре байт из заголовка команды (предположительно 8225280 байт)
      7. Последний цилиндр предположительно 60801-ый
      8. Считаем делением сколько необходимо цилиндров, округляем вверх
      9. 68719476736 / 8225280 ~ 8355
      10. Прибавляем количество цилиндров /dev/sda1 (предположительно 64)
      11. 8355 + 64 = 8418
      12. Выполняем следующую последовательность команд
        1. n
        2. p
        3. 3
        4. Вводим расчитанный размер
        5. Оставляем номер последнего цилиндра
        6. Не указанное оставляем по умолчанию нажимая enter
  5. Расширяем раздел для Slackware
    1. Проводим сухой запуск команды growpart -N /dev/sda 2
    2. Запускаем команду в реальном режиме growpart /dev/sda 2
  6. Перегружаем систему, изучаем новое разделение томов вышеупомянутыми командами
  7. Далее OpenSUSE пересоздаст /dev/sda3 и создаст /dev/sda4 для своего swap-а.

TODO: В будущем подумать как использовать общий swap, так же как вариант симметрично разместить OpenSUSE на /dev/sda3 на LVM

Образ и установка

Залейте образ на usb носитель командой dd. Много информации по настройке системы вы можете найти данном документе. При установке образа, вы сталкнётесь с графической средой, следовательно вам понадобится мышка.

Если используя интерфейс HDMI при установке сервера вы сталкнётесь с серъёзными проблемами в виде прыгающего экрана, то вам стоит использовать переключиться на VGA

При выборе програмного обеспечения, в перспективе Patterns выберите XFCE Desktop Environment.

XfcePatterns

При настройке файла подкачки (Swap) установите его в два раза больше объёма ОЗУ. Настройте файл подкачки в виде раздела диска или логического тома.

При создании пользователя, выберите учётную запись, пусть к примеру это будет ilmarinen. Выберите пароль. Оставьте галочку присвоения того же пароля системну пользователю.

При настройке установки, слева, в секции Installation Overview под заголовком Installation, установите следующие опции, как показано ниже на картинке:

  • Firewall will be enabled
  • SSH service will be enabled
  • SSH port will be open

SSHServer

Учтите, что сетевой образ Tumbleweed имеет срок годности. Когда последняя версия сетевого установщика достаточно разрйдётся с образом в сети, вы получите сообщение вроде:

You don't have appropriate image for such mode, download it and restart

В данном случае единственное решение это перезалить образ на флешку.

Разблокировка firewall-а

Во время определения сети, вы можете сталкнуться с проблемой блокировки Firewall-а, если последний имеется в вашей сети, даже если вы разблокировали Firewall для IP привязанного к данному хосту, так как во время установки система берёт новый IP по DHCP. В данном случае, вы можете использовать один из двух методов:

  1. Установить настройки сети свободного разблокированного адреса
  2. Запустить комманду разблокировки

Для настройки сети, вернитесь на главный экран перейдите в меню с названием типа Expert Mode, там Network config, откажитесь оставлять настроенные данные, откажитесь от DHCP. Далее действуйте следующим образом:

  1. Найдите свободный разблокированный IP адресс
  2. Откройте настроки вашей сети с доступного компьюера
  3. Расчитайте маску подсети (количество бит) (1)
  4. Пропингуйте шлюз (router)
  5. Пропингуйте DNS Google-а: 8.8.8.8

(1) К примеру для 255.255.255.254, это будет ipaddress/23

Перейдите к настройки сети, заполняя необходимую информацию, строку на каждом окне:

xx.yy.zz.ww/nn
xx.yy.zz.1
8.8.8.8
пустое

Для разблокировки firewall-а запустите команду передавая пользователя и пароль:

curl --max-time 1 -k -i -s -u <USER>:<PASSWORD> \
  $(curl --max-time 1 -k -i -s http://yandex.ru | \
    grep Location | \
    awk '{print $2}' | \
    tr -d '[:space:]')

Вашему вниманию представлен скрипт разблокировки, который вы можете установить по пути PATH.

Первый логин

Когда система попросит перезагрузится, нажмите да и как экран погаснет, выньте usb диск. Первый ваш логин совершите в стандартную графическую оболочку Plasma.

При первом логине, сконфигурируйте sudo для пользователя ilmarinen с помощью комманды sudo visudo добавив необходимую запись, как указанно ниже. Для команды sudo используйте тот же пароль что для пользовател ilmarinen.

Графические среды

В процессе работы с OpenSUSE вам, без сомнения, придётся столкнуться с различными графическими оболочками. Иначе, системами рабочей среды (Desktop managers). Ниже подробно рассказывается о том, при каких обстоятельствах нам следует использовать какую среду.

Немного теории о графике

Давным давно было придумано устройство Телетайп. Из Википедии:

Электромеханическая печатная машина, используемая для передачи между двумя абонентами текстовых сообщений по простейшему электрическому каналу (обычно по паре проводов)

В оригинале устройство называлось Teletype и обозначалось аббревиатурой TTY. В какой то момент архитекторы ЭВМ решили использовать эту технологию для взаимодействия с вычислительными машинами. В ранних Unix-ах дескрипторы этих устройств были представлены файлами /dev/ttyN. Со временем печатная машина превратилась в монитор, клавиатура стала отдельным устройством, но общее имя терминала вывода остолось тем же, гордым TTY. Часть мониторов начали работать в графическом режиме, где главными стали окна и мышка, но ядро ОС всё так же работало с ними через те же /dev/ttyN. Разумеется не всегда был смысл подключать несколько физических устройств к одному вычислительному блоку. TTY стал виртуальным, и на один и тот же монитор можно было выводить разные терминалы. В большинстве своём переключение происходило комбинацией Alt + Ctrl + FnN. Так и по сей день. Первый TTY открывается комбинацией Alt + Ctrl + F1, второй Alt + Ctrl + F2 и так далее. На OpenSUSE графический терминал именно второй.

Далее я буду использовать приближённую терминологию, с которой часть авторов могут не согласиться

На графический терминал информация подаётся из Дисплейного сервера, в нашем случае это один из следующих:

  1. Xorg
  2. Wayland

Дисплейный сервер взаимодействует с Оконным менеджером с одной стороны, и Графическим интерфейсом с другой. Оконный менеджер ответственен за аутентификацию пользователя, а Графический интерфейс (так же называемый Графической оболочкой) уже непосредственно создаёт рабочее окружение. В нашем случае Графическая оболочка может быть одна из следующих:

  1. Plasma на Xorg
  2. Plasma на Wayland
  3. Xfce
  4. Lxde
  5. IceWM

При этом Оконный менеджер может быть:

  1. Консольный
  2. LightDM
  3. SDDM
  4. XDM

Graphics

В части своей Оконные менеджеры идут из одного набора с Графическим интерфейсом. К примеру LightDM соотносится с Lxde, а SDDM с Plasma.

Во всей этой архитектуре есть так же ещё одна составляющая. Каркас на котором написаны Графический интерфейс и Пользовательские приложения. Каркасы у нас имеются в основном следующие:

  • Qt
  • GTK+

Смену оболочки мы совершаем через утилиту yast2 alternatives. Выберите необходимое значение опции default-xsession.desktop. За Оконный менеджер отвечает опция default-displaymanager, но Оконный менеджер в общем менять не имеет смысла. yast2 имеет так же и графическую среду, но консольная может оказаться проще:

sudo yast2 alternatives

Важно заметить, что Xrdp подключается так же как и Оконный менеджер к определённому Графическому интерфейсу, фактически выполняя одну из функций Оконного менеджера

При изменении Графической оболочки, если система зависнет, возможно вам придётся открыть консольный терминал (Ctrk + Alt + F1) И перегрузить соответствующий сервис:

sudo systemctl restart display-manager

Для отладки обратите внимание на лог Xorg-а: /var/log/Xorg.0.log. В случае Wayland поток логов скорее всего будет проходить по иному маршруту.

TODO: узнать куда пишет Wayland

Plasma

Графическая среда OpenSUSE по умолчанию. На самом деле очень красивая, относительно лёгкая, правда в Tumbleweed иногда непредсказуемая, так как представляет из себя последнюю, ещё не полностью тестированную версию.

Plasma и терминал

В основном всё взаимодействие с графической средой происходит через подсистему qdbus. К примеру: завершение данной пользовательской сессии:

qdbus org.kde.Shutdown /Shutdown logout

Plasma и расскладка клавиатуры

Добавьте русскую раскладку через сситемные настройки, которые вы найдёте в меню Пуск -> Input Devices -> Keyboard -> Layouts -> Add.

Обратите внимание на Alternative shortcut: Meta + Alt + K.

В свете того, что мы работаем через Xrdp, достаточно сложно настроить привычный нам ALt + Shift, даже Alt + Space не работает - он перехватывается системой. Проще всего или превыкнуть именно к Meta + Alt + K, где Meta это клавиша Win, или настроить Win + Space.

Отключение автообновления

Данный раздел актуален в случае если вы устанавливаете версию Leap

Отключите в OS систему автообновлений, иначе придётся столкнуться с назойливой и трудно решаемой проблемой:

PackageKit blockiert zypper. Dies passiert, wenn Sie ein Aktualisierungsmodul oder eine andere Softwareverwaltungsanwendung benutzen, die PackageKit verwendet.
PackageKit beenden? [ja/nein] (nein): j
PackageKit läuft noch (wahrscheinlich aktiv).

Для отключения, нужно удалить пакет plasma5-pk-updates, сначала найдём его точную версию:

rpm -qa | grep -i plasma5-pk-updates
plasma5-pk-updates-lang-0.3.2-bp153.2.2.1.noarch
plasma5-pk-updates-0.3.2-bp153.2.2.1.x86_64

Затем удалим их поочерёдно учитывая конкретные версии:

sudo rpm -e plasma5-pk-updates-lang
sudo rpm -e plasma5-pk-updates

Если процесс запущен и не даёт воспользоваться командой zypper, найдите и удалите его с помощью ps -A и kill -9.

Так же полезно отключить сервис индексации файлов:

balooctl suspend
balooctl disable
balooctl purge

Если сервис не отключается, то его можно ликвидировать по старинке:

ps -ef | greps baloo
sudo kill -9 <pid>

Всегда следите за состоянием системы и старайтесь избегать программ, которые её неоправданно грузят. Вы можете мониторить производительность, с помощью программы: htop.

Xfce

Мышинная среда Xfce полностью настраивается мышкой. Имеет французские корни. Легче чем Plasma, от туда же ловит настройки раскладки клавиатуры.

IceWM

IceWM это самая лёгкая но и самая бедная и труднонастраиваемая среда. Её мы будем использовать на первой фазе конфигурации. В основном все настройки этой среды происходят через файлы.

Буфер обмена при подключении через Xrdp может иногда давать сбой. Для копирования в программе Konsole-е, к примеру, в общий буфер, вы можете использовать комбинацию Ctrl + Shift + c.

Все настройки IceWM читает в основном из двух папок, но нас интересует лишь второй вариант - папка в нашем домашнем каталоге:

  1. /etc/icewm
  2. $HOME/.icewm

Основные настройки располагаются в файле preferences. Ознакомьтесь с документацией данного файла. Итак, вот основные файлы настройки IceWM:

  • preferences - общие настройки
  • keys - горячие клавиши
  • menu - меню системы Пуск
  • startup - команды автозапуска

Настройте меню системы Пуск удалив от туда всё лишнее, что тормозит систему. Добавьте файл menu со следующим содержимым:

prog "Konsole" konsole konsole
prog Firefox firefox firefox
menuprog SUSE folder xdg_menu --format icewm

Добавьте горячую комбинацию клавиш Alt + Ctrl + t для запуска Konsole. Добавьте файл keys со следующим содержанием:

key  "Alt+Ctrl+t"  konsole

IceWM и экраны

Если ваш системный блок имеет несколько графических карт, то возможно, IceWM разделит монитор, и при первом входе в систему, вы увидете пустой экран без возможности использовать како либо окно. Изучите комбинации клавиш по умолчанию. Нажмите правую клавишу мыши, запустите xterm. Если вы не увидете окно терминала, то нажмите несколько раз комбинации: Ctrl+Alt+LeftArrow / Ctrl+Alt+RightArrow. Если вы ни чего не увидете то нажмите снова правую клавишу мышки, и в меню Windows найдите окошко теринала, нажмите на него в самомо меню. Далее не нажимая ни чего иногокроме как следующую комбинацию, нажмите Alt+F7. Тепреь начните двигать мышку, и окно само перепрыгнет в видимую область. Нажмите левую клавишу мышки, и окно зафиксируется. Вы можете увеличить его во весь экран.

Наберите следующую команду:

xrandr -q

Вы получите вывод на подобии:

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 ...
VGA-1 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 connected 1920x1080+1920+0 ...

Если монитор подключён по HDMI (а узнать об этом можно по форме контакта подключения), то строка eDP-1 connected подсказывает нам о проблеме. Отключите дополнительный монитор и установите HDMI-1 основным:

xrandr --output eDP-1 --off
xrandr --output HDMI-1 --primary

Теперь вы должны увидеть меню IceWM в нижней части экрана. Зафиксируйте решение. Создайте файл $HOME/.icewm/startup, запишите туда shebang и данную комманду, затем выдайте ему права:

chmod u+x $HOME/.icewm/startup

Перегрузите систему. После перегрузки у вас должен подключится только один монитор. В идеале монитор eDP-1 нужно отключить на уровне udev-а.

А вот вом рассказ о первом путешествии моей мышки с трану зазеркалья IceWM:

I moved the mouse to the left the boundary of The Visible World. The mouse touched the border. She squeaked in surprise! There wasn't border! Suddenly she jumped into the void, to the Darkness. Мy mouse felt the Emptiness there, very much Emptiness. She started to move forward and forward. I called her back.
In very border of two worlds - "The World of the living" and "Ice Wims Dale" - "The World of the dead" my mouse, as a cat, catch the hem of the dress of Firefox!
"Eh!" - shouted the Fox! - "What do you do?!".
The mouse squeaked happily! She took the Fox from the Death to the Life!

IceWM и терминал

После настройки необходимых файлов, перегрузите среду следующей командой:

icewm --restart --replace

Пулностью удалить IceWM из памяти вы можете следующей командой. В данном случае вы уже вернётесь в Оконный менеджер:

pkill icewm

IceWM и Расскладка клавиатуры

Определите комбинацию Alt + Shift для переключения раскладки клавиатуры. Добавьте файл startup со следующим содержимым:

TODO: разобраться с выводом индикатора раскладки на панель

setxkbmap \
  -layout "us,ru(winkeys)" \
  -model "pc105" \
  -option "grp:alt_shift_toggle"

Вопрос производительности

Как известно предполагается, что мы будем использовать компьютеры с ограниченным объёмом памяти. Если для продового режима (Leap) выделенных, ресурсов нам вполне достаточно, то для режима разработки (Tumbleweed) мы ощущаем серьёзный дифицит. На данный момент мы располагаем следующими горлышками бутылки в сравнении со среднестатистической станцией разработки:

3.7 Gi RAM, 3.6 GHz x 4

Фазы конфигурации

На пост выше конечно не ответили, но он очень помог собраться с мыслями. Итак! Учитывая, что у нас с одной стороны недостаток ресурсов относительно нашего расточительного времени, а с другой собственно говоря очень расточительное ПО, я решила определить три фазы в которых смогут быть наши станции разработки относительно объёма ОЗУ и набора програмного обеспечения. Средняя фаза предполагает объём памяти между базовой и полной. Для продового режима, как сказанно выше, указанных объёмов вполне достаточно:

Объём ОЗУ Window Manager Среда разработки
Базовая 4 Gi IceWM vim(1)/QtDesiner
Средняя Xfce QDevelop/QtDesiner
Полоная 8 Gi Plasma QtCreator

(1) vim + Termdebug + CtrlK

Swap

Файл подкачки (swap) рекомендуется делать в полтора два раза больше объёма ОЗУ. Файл подкачки сыграет большую роль при сборки мегалитических проектов типа llvm, так как последнее время на плюсах всё больше используют шаблоны, что экспоненционально увеличивает расход ресурсов. Если система при установке создала недостаточно большой файл подкачки, увеличим его.

Если последний является именно файлом, то вам будет достаточно следующих действий описанных тут и тут:

  1. Команда swapoff
  2. Команда dd
  3. Команда mkswap
  4. Редактирование /etc/fstab
  5. Команда swapon, как

Если же при установке система создала отдельный том недостаточного размера, то вам придётся немного потрудиться. Заранее ознакомтесь с возможной проблемой вызванной подсистемой quota. Gparted, который мы привлечём к помощи скорее всего не сможет изменить размер диска с активной квотой.

Итак, допустим /dev/sda1 занимает у нас 500 Mb и хранит: загрузочный сектор, initrd и grub. /dev/sda2 пусть будет занят какой-нибудь дополнительной системой, к примеру Slackware 7.0. Тогда при установке OpenSUSE мы получим /dev/sda3 занятый системой, и /dev/sda4 отведённый под swap. По умолчанию, swap создасться в размере 2 Gib.

Напомним, что каждая размерность системы Xбибайтов равняется $1024$ единицам предыдущей размерности; так 1 Gib (Гибибайт) равен $1024$-ём Mib (Мебибайтам), смотрите Меры объёма памяти

Отключите квоту в основной системе, предварительно проверив её:

btrfs quota rescan -w /
btrfs quota disable /

Загрузитесь с Tumbleweed LiveUSB, и установите Gparted:

Используйте Leap LiveUSB, Tumbleweed стал крайне не стабилен

sudo zypper install gparted

Откройте последний через меню пуск, уменьшите объём /dev/sda3 оставив после него свободное пространство размером $6144$ Mib. Нажмите на галочку сверху. Подтвердите осознание опасности действия. Остальные манипуляции с томами, от греха подальше, мы выполним уже в режиме работы основной ОС.

После успешного уменьшения тома, выключите компьютер, выньте Flash USB, загрузитесь в основную ОС. Включите квоту, и ещё раз проверьте её:

btrfs quota enable /
btrfs quota rescan -w /

Отключите swap:

sudo swapoff -a

Пересойздайте /dev/sda4:

  1. sudo fdisk /dev/sda
  2. p для ознакомления
  3. d для удаления
    1. Выберите 4-ый том
  4. n для создания
    1. Тип - primary
    2. Остальное подтвердите по умолчанию
  5. Ещё раз p для ознакомления
  6. l для вывода типов тома
  7. t для присвоения типа Linux swap / Solaris
    1. 82 тип Linux swap / Solaris
  8. Ещё раз p для ознакомления
  9. w для записи
  10. q для выхода

Отформатируйте том под swap:

sudo mkswap /dev/sda4

Подмените UUID в соответствющей строке в файле /etc/fstab. Сначала примерьтесь, затем добавьте опцию -i (in-place) к команде sed:

sed "s/$(cat ~/fstab |\
    grep swap |\
    awk -F" " '{print $1}' |\
    awk -F= '{print $2}')/$(ls -l /dev/disk/by-uuid |\
        grep sda4 |\
        awk -F" " '{print $9}')/g" /etc/fstab
# Если всё хорошо, вызовете "sed -i ..."

Включите swap:

sudo swapon -a

Убедитесь, что swap работает:

free -h

Настройка сети

Выберите имя хоста, к примеру kalevala. В главе имя хоста описано как произвести необходимую настройку.


Настройте в файле /etc/sysconfig/network параметр HOSTNAME в формате <HOSTNAME>.domain.name, к примеру kalevala.domain.central.

Проверьте свой IP с помощью комманды ifconfig, к примеру он: 192.168.1.70.

Убедитесь, что IP будет постоянным. Иногда, в случаях когда мы не можем сконфигурировать DHCP, а в случае виртуальной машины мы используем сетевой мост, то единственный способ, это установиnь IP постоянным через системные файлы. На CentOS к примеру это /etc/sysconfig/network-scripts/ifcfg-ethX.


Сделайте те же настройки, что для Slackware учитывая, что имя хоста в файле /etc/hostname, а IP мы находим командой: ip a.

Очень полезно отказаться от Вселенского Протокола ipv6, убрав нужную галочку в пунктах меню YaST. Остальная конфигурация сети не потдерживается через YaST, пусть так и остаётся.

Настраиваем firewall:

sudo firewall-cmd --zone=public --add-port=1521/tcp
sudo firewall-cmd --permanent --zone=public --add-port=1521/tcp
sudo firewall-cmd --list-all

Опция --permanent обеспечивает сохранность конфигурации между перезагрузками. Для того, что бы опция приминалась сразу, нужен вызов без опции --permanent.

Далее проверяем, что порт слушается с помощью команды Schutzstaffel ss:

ss -ln | grep 1521
tcp LISTEN 0 128 0.0.0.0:1521 0.0.0.0:*

Для вывода процесса, добавьте -p.

При трудностях с доступом к Oracle-у на виртуальной машине с хоста, учитывая отсутствие прав на физических хостах и отсутствие возможности установить telnet, в целях отладки, можно воспользоваться следующим скриптом python-а. Сам же python вы можете установить в рамках пользователя без прав администратора. Предположим, что IP виртуальной машины с OpenSUSE - 192.168.1.112:

from telnetlib import Telnet
Telnet('192.168.1.112', 1521).interact()

Добавляем в /etc/hosts строку в формате <IP> <HOSTNAME>.domain.name <HOSTNAME>, к примеру:

192.168.1.113	kalevala.domain.name kalevala

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

Перезапуск интерфейса

Определите какой интерфейс у вас активен, командой:

ip a

Допустим, это eth0. Перегрузите его:

ifdown eth0
ifup eth0

Динамическая настройки

По умолчанию настройка сети должна выдаваться по DHCP. Вот содержимое файла /etc/sysconfig/network/ifcfg-eth0 по умолчанию:

BOOTPROTO='dhcp'
STARTMODE='auto'
ZONE=public

Вот содержимое папки /etc/sysconfig/network по умолчанию:

-rw-r--r-- 1 root root 9.5K Aug 29 18:01 config
-rw-r--r-- 1 root root  16K Aug 29 18:01 dhcp
-rw------- 1 root root   46 Aug 29 18:04 ifcfg-eth0
-rw-r--r-- 1 root root   34 Aug 29 12:48 ifcfg-eth0.bak
-rw-r--r-- 1 root root   34 Aug 29 11:09 ifcfg--h
-rw------- 1 root root  147 May  9 13:08 ifcfg-lo
-rw-r--r-- 1 root root  22K Aug  1  2022 ifcfg.template
drwxr-xr-x 1 root root    0 Mar 15  2022 if-down.d
drwxr-xr-x 1 root root    0 Mar 15  2022 if-up.d
drwx------ 1 root root    0 Mar 15  2022 providers
drwxr-xr-x 1 root root   38 Aug 29 17:50 scripts

Статическая настройка сети

В случае настройки сервера, сконфигурируйте сеть заполнив следующие файлы, следующими данными, используя команду vim. Предварительно найдите свободный IP адрес. Пусть к примеру у вас следующая настрйока сети:

IP 13.14.11.143
MASK 255.255.255.0
NETWORK 13.14.11.0
GATEWAY 13.14.11.1
NAMESERVER 8.8.8.8

Отредактируйте файл /etc/sysconfig/network/ifcfg-eth0:

BOOTPROTO='static'
BROADCAST='13.14.11.255'
IPADDR='13.14.11.143'
NETMASK='255.255.255.0'
NETWORK='13.14.11.0'
STARTMODE='auto'
USERCONTROL='no'
ZONE=public

Создайте файл /etc/sysconfig/network/ifroute-eth0:

13.14.11.0 13.14.11.1  255.255.255.0 eth0
default 13.14.11.1 0.0.0.0 eth0

Проверьте содержимое файла /etc/resolv.conf:

nameserver 8.8.8.8

Для разблокировки firewall-а, если такой имеется в вашей сети, используйте скрипт cisco.sh, который далее будет размещён по пути $PATH в вашей системе. При вызове скрипта передайте имя пользователя.

Если же по какой то причине скрипт cisco.sh вам не подходит, рекомендуется использовать elinks. Это так же позволит ваи разблокировать Firewall-а, если такой имеется в вашей сети. На самом деле elinks достаточно полезная утилита, и её в общем стоит установить.

Отмена IPv6

Добавьте в файл /etc/sysctl.conf следующие строки:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Перезагрузите системные опции:

sysctl -p

Переменные среды

Определите полезные для работы переменные и alias-ы в среде терминала. Для этого примените (source) скрипт env.sh через $HOME/.bashrc:

# Добавьте строку в $HOME/.bashrc
. $HOME/repos/sysscripts/opensuse/env.sh

Экспорт переменных с помощью команды export важен, иначе данную переменную не будет видно в вызывающем скрипте

Настройки

Суперпользователь

Разработка на OpenSuse будет происходить не с пользователем root и не с аппликативным пользователем, с которым будет запускаться приложение в рабочем режиме. Разработка будет происходить с обычными пользователями, состоящими в группе users.

Для того, что бы вам было удебнее использовать команду sudo, добавьте следующую запись в соответствующий системный файл запустив редактор с помощью:

sudo visudo

Предположим, что имя вашего пользователя: olga, тогда его часть Defaults будет выглядеть так:

Defaults targetpw
ALL     ALL=(ALL) ALL
olga    ALL=(ALL) NOPASSWD:ALL

Имя хоста

Установите имя вашего хоста. Вы можете добавить имя домена к имени хоста:

sudo hostnamectl set-hostname <HOSTNAME>

Не забудьте затем прописать запись в /etc/hosts, к примеру:

192.168.1.30     kalevala kalevala.ru

Настройка SSH

При подключении к разным хостам по SSH у вас может быть следующая ошибка:

Unable to negotiate with 10.11.8.73 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

Создайте файл ~/.ssh/config и для каждого хоста с подобной ошибкой добавьте блок на подобии:

Host 10.11.12.13
    User root
    PubkeyAcceptedAlgorithms +ssh-rsa
    HostkeyAlgorithms +ssh-rsa

Настройка vim

Создайте файл $HOME/.vimrc с содержанием из главы в мануале vimide.

Удалённый терминал

Убедитесь что вы располагаете публичным ключём вашего приватного, и если нет, создайте его:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Интегриуйте ключ в файл authorized_keys на хосте OpenSUSE:

ssh-copy-id -i ~/.ssh/id_rsa ilmarinen@kalevala

LocateDB

Установите пакет findutils-locate:

sudo zypper install findutils-locate

Создайте базу данных очень полезной утилиты locate:

sudo updatedb

Пример использования утилиты. Допустим вам надо найти расположение файла icewm/menu в системе:

locate icewm/menu

Приложения

Тут привидён список необходимых приложений доступных из базовых репозиториев OpenSUSE. Установите следующий список полезных и необходимых приложений, используя команду sudo zypper install <PACKAGE>:

  • git - система контроля версий
  • gcc-c++ - компилятор C++
  • make - система сборки
  • cmake - система конфигурации сборки
  • ruby - компилятор ruby
  • htop - монитор производительности
  • elinks - консольный клиент интернета
  • neofetch - консолидатор информации о системе
  • findutils-locate - команда locate

Удалите следующие приложения используя команду sudo zypper remove <PACKAGE> в виду их расточительности или иных причин:

  • kalendarac - календарь; занимает много места в ОЗУ

Sysscripts

Скачайте данный репозиторий по пути $HOME/repos/sysscripts, далее мы пропишем папку scripts по пути $PATH.

Папки сборок

Для сборки стандартных приложений нам стоит подготовить специальные папки.

TODO: Устанавливать приложения по стандартным путям типа /usr/local/bin

sudo mkdir -p $APPS

Промежуточные - объектные файлы, будем располагать в папках $HOME/builds:

cd $BUILDS
mkdir $APPS

Дополнительные пакеты

Установка Xrdp

Устанавливаем Xrdp:

sudo zypper refresh
sudo zypper install xrdp
sudo systemctl enable xrdp
sudo systemctl start xrdp
sudo systemctl status xrdp
sudo firewall-cmd --permanent --zone=public --add-service=ms-wbt
sudo firewall-cmd --reload

Далее необходимо (обязательно) разлогинеться из основной сессии, иначе на сессии Xrdp будет пустое окно. Так же перед запуском команды mstsc заранее переключите расскладку клавиатуры на английский. В окне Xrdp у вас это сделать не получится. При подключении по Xrdp используйте исключительно опцию Xorg.

Xrdp

Установка SSH

Если при установке OpenSUSE вы не настроили установку SSH сервера, то выполните следующие действия:

sudo zypper refresh
sudo zypper install --no-confirm openssh
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --zone=public --add-service=ssh
sudo firewall-cmd --reload

Установка Xfce

Если при установке OpenSUSE вы не настроили установку графической среды Xfce сервера, то установите последний одним из следующих способой:

  1. Вызвав графическую оболочку yast
  2. Через команду терминала

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

Во втором случае запустите команду:

sudo zypper install patterns-xfce-xfce

Zypper

Zypper, это система контроля пакетов. Работает она поверх экосистемы rpm, по сути расширяя её. Как любая система контроля пакетов, zypper работает с удалёнными репозиториями. Возможно вам предётся добавлять какие то из них, но более вероятно, что вам придётся ещё и удалять их. Вот некоторые полезные команды zypper:

# Обновить статус системы управления пакетами
sudo zypper refresh
# Если начинают появлятся красные строки с ошибками, значит некоторые
# репозитории нужно удалить. Выводим список репозиториев, должна признать,
# разработчики постарались на славу, и таблица поистине эстетична и
# информативна
zypper repos
# Берём номера битых репозиториев, и удаляем их за раз. Важно! Если удалить по
# одному, то надо не забыть каждый раз вновь посмотреть список, так как каждый
# раз репозитории будут переиндексироваться
sudo zypper removerepo 1 2 ...
# Проверяем что всё вернулось к стабильности
sudo zypper refresh
# Выводим список установленных пакетов
zypper packages --installed-only
# Поиск пакета по имени содержимого файла:
zypper se --provides --match-substrings libsso

TODO: проверить актуальность; сейчас вроде официальные репозитории OpenSUSE снова заработали

После атаки Мордора на Рохан zypper ref стал очень долгим, по понятным причинам. Но к счастью те немногие эльфы, что сохранились в Мордоре создали и сохранили локальные репозитории OpenSuse.

Базовый url у них: https://mirror.yandex.ru/opensuse.

Вам в любом случае будет необходимо заменить оригинальный url репозиториев на yandex-овский.

Переходим в папку: /etc/zypp/repos.d, и пользуемся волшебной командой: sudo vim *.

В каждом файле меняем http[s]://download.opensuse.org на https://mirror.yandex.ru/opensuse в свойствах baseurl и gpgkey. Переходим на следующий файл внутренней командой: :wn, в конце обычное :wq.

Затем обновляем репозитории: sudo zypper ref.

В яндексе пока нет security/SELinux/SLE_15_SP3/, поэтому ставим просто security/SELinux/SLE_15/


RPM

Как сказано выше, rpm это ядро экосистемы контроля версий в OpenSUSE. Вот некоторые полезные команды rpm:

# Распаковка файлов и скриптов архива rpm
rpm2cpio oracle-xe-11.2.0-1.0.x86_64.rpm | cpio -idmv
rpm -qp --scripts oracle-xe-11.2.0-1.0.x86_64.rpm > scripts.sh
# Просмотр содержимого пакета
rpm -ql libopenssl-3-devel

Zypper - символы отладки

Для отладки системных библиотек, типа libgcc_s.so.1, вам необходимы символы отладки, так как большинство из них собраны без оных.

Сертификаты

OS

Сертификаты должны распологаться в папке /opt/certs. Создаём новый сертификат:

cd /opt/certs
openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout ilmarinen.key \
  -x509 -days 365 -out ilmarinen.crt \
  -addext "subjectAltName = DNS:$HOSTNAME" \
  -subj "/C=RU/ST=Vologda/L=Vologda/O=Kalevala/OU=NIT/CN=$HOSTNAME"

Проверьте, что поле subjectAltName проставилось:

openssl x509 -in ilmarinen.crt -text | less

Установим сертификаты в системе:

sudo cp /opt/certspos.crt /usr/share/pki/trust/anchors
sudo update-ca-certificates

При изменениях в сертификате, для применения в Docker registry, сам registry нужно удалить и пересоздать, так же пересоздать секреты; о Docker registry написано ниже

Java

Для VisualStudio Code всё же придётся установить сертификаты напрямую в keystore Java-ы.

Для этого воспользуйтесь скриптом certs/register-jdk.sh в данном проекте:

Запуск
  register-jdk.sh -h
    -h             вывод справки
  register-jdk.sh <CERT_FLDR> <JAVA_VER> <COMMAND> <CERTIFICATE> [<DRY_RUN>]
    <CERT_FLDR>    папка с сертификатами
    <JAVA_VER>     версия JDK: 8 или 11
    <COMMAND>      комманда: register или unregister
    <CERTIFICATE>  имя сертификатат без расширения
    <DRY_RUN>      сухая прогонка: d
Примечание:
  1. Экспортируйте переменную среды JDK_PATH для регистрации
     сертификатов в пользовательском JDK.
  2. Используйте сухую прогонку для проедворительной проверки
     параметров
Пример
  export JDK_PATH=/opt/jdk-17
  register-jdk.sh certs 11 register valkovesi

Сам же VSCode требует JDK 17 для своей работы с кодом Java-ы. Более того, он возможно будет пытаться запускает проект на этом JDK.

Укажите для IDE пути к JDK в следующем блоке:

{
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-11",
            "path": "/usr/lib64/jvm/java-11-openjdk-11/",
        },
        {
            "name": "JavaSE-17",
            "path": "/home/olga/java/jdk-17.0.4.1+1",
            "default": true
        }
    ]
}

Разместите этот блок на любом уровне конфигурации, к примеру в файле: ~/.config/Code/User/settings.json

Git

Стоит настроить следующие настройки Git-а на рабочей виртуалке OpenSuse. Впишите свои ФИО и git_id:

git config --global init.defaultBranch main
git config --global --edit
# Содержимое файла настроки
1 # This is Git's per-user configuration file.
2 [user]
3 # Please adapt and uncomment the following lines:
4    name = <Фамилия Имя Отчество> (<gitId>)
5    email = gitId@Kalevala.org
6 [init]
7    defaultBranch = main

GitQlient

Git клиент идеально интегрированный в нашу экосистему.

Предполагается, что будем собирать HEAD ветки master, так как проект достаточно стабилен, во всяком случае коммит 58b87fbd встал на Tumbleweed 20240304.

TODO: возможно всё же зафиксировать версию

Подготовте сборку и соберите GitQlient

# Переходим в папку с репозиториями
cd $REPOS
# Клонируем GitQlient
git clone https://github.com/francescmm/GitQlient.git && cd GitQlient
# Подготавливаем проект
qmake GitQlient.pro

Для сборки приложения с символами отладки запустите qmake с дополнительной опцией:

qmake CONFIG+=debug GitQlient.pro

Запустите сборку и установку:

make
sudo make install

Cmake

Модули Qt в плане Cmake соответствуют следующему шаблону:

<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (U)

Но главное это помнить о понятии qtbase. Если Qt собран с опцией -developer-build, то это папка qtbase в корне установки Qt. Корень установки Qt у нас всегда /opt/qt[4|5]. Если сборка была без этой опции, то qtbase это просто папка корня Qt.

В CMake нужно установить переменную CMAKE_PREFIX_PATH в qtbase:

set(CMAKE_PREFIX_PATH /opt/qt5)

Команды CMake для сборки проекта через командную строку находятся в файле build.gradle:

cmake -S . -B build -DCMAKE_BUILD_TYPE:STRING=<debug|release>
cmake --build build -j $(nproc)

Железо

Вам очевидно придётся много работать с устройствами, в том числе с usb. Установите libusb:

zypper se --provides --match-substrings "libusb"
zypper in libusb-1_0-0

Добавьте права для разработки на необходимые устройства. Выведите список устройств: lsusb.

Добавьте правило для необходимых устройств. Создайте файл /etc/udev/rules.d/[nn]-[project].rules, где nn номер правила, а project имя вашего проекта. Вот шаблон:

SUBSYSTEM=="usb", ATTRS{idVendor}=="1d6b", ATTRS{idProduct}=="0001", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d6b", ATTRS{idProduct}=="0002", MODE="0666"

Перезагрузите udev:

sudo udevadm control --reload-rules && sudo udevadm trigger

Virtual Box

Если вы запускаетет SLES на виртуальной машине Oracle Virtual Box то при переходе на версию Virtual Box 7.0 вы можете столкнуться с трудностями при налаживании связи между гостевой ОС и виртуальной машиной. Что произошло в моём случае.

Было:

  • Virtual Box 5.2.30 r130521 (Qt5.6.2)
  • openSUSE Leap 15.3 состояние начала 2022 года

Я обновила Virtual Box на 7.0.2 r154219 (Qt5.15.2), в результате слетела VBox GuestAdditions, симптомы проявлялись в разном порядке по нарастающей:

  • Зкран стал маленьким
  • Сеть пропала
  • Виртуальный оптический привод не работет
  • При перегрузке система зависала

Для установки Гостевых Дополнений необходимо примонтировать диск через меню "Устройства" в панели VM. Честно, до сих пор монтирование не очень стабильно работает, но на тот момент при ручном монтирвоании выходила ошибка:

unknown filesystem type 'iso9660'

Решение:

sudo depmod -a
sudo mount /dev/sr0 /mnt
ls -l /mnt

Далее оказалось, что гостевые дополнения нужно собрать, делается это коммандой:

sudo /run/media/olga/VBox_GAs_7.0.2/VBoxLinuxAdditions.run

При сборке система ищет заголовки ядра, для этого нам необходим пакет kernel-source. После его установки, мы можем увидеть его содержание: rpm -ql kernel-source | head. На момент обновления, последняя версия ядра для openSUSE Leap 15.3 была: 5.3.18-150300.59.98, следовательно, исходники хранятся в папке: /usr/src/linux-5.3.18-150300.59.98.

Команда uname -r давала нам знать, что версия сейчас ниже, а соответсвенно и VBoxLinuxAdditions.run гласил о том, что не может найти заголовки, несмотря на установленный пакет. Решение: обновить ядро. При этом решено было обновить не только ядро, а всю ОС на состояние конца 2022 года коммандой zypper update. Обновление было громоздким, и ком вышеприведённых проблем продолжил нарастать, пока всё же не удалось собрать гостевые дополнения.

После сборки всегда нужно перегружать компьютер. Так же пришлось несколько раз повторить итерацию:

sudo zypper update
sudo reboot
sudo ./VBoxLinuxAdditions.run
sudo reboot

Пока система более менее не пришла к стабильному состоянию.

Внешние папки

При разработке на виртуальной машине, вам необходимо будет монтировать папки, настроенные как общие. Для этого в первую очередь настройте общую папку в конфигурации виртуальной машины.

Для активации share-а рекомендуется использовать alias: share в ~/.bashrc:

share

При необходимости автомонитования на OpenSuse это реализуется с помощью systemd.


Так же, вы можете сделать эти настройки постоянными, внеся нужные изменения в файл /etc/fstab. Но это не рекомендуется, так как образ не будет полностью портабельным на реальный хост.

Вот строка для файла /etc/fstab в случае, к примеру, с CentOS.

share    /mnt/share   vboxsf    defaults    0 0

Матрица

И на последок. Хотите незабываемых ощущений? Почувствовать себя Нео и прикоснуться к вечному? У вас ни когда не было желания в живую пообщаться по одной из первых сетей быстрых сообщений? У меня для вас хорошие новости! Сумрачный немецкий гений создавший OpenSUSE внедрил в его экосистему сеть IRC! Более того, IRC каналы живы, и активно используются для поддержки пользователей.

IRC была основана в 1988-ом году. И конечно она имеет ряд недостатков по сравнению с нынешними системами обмена сообщений. Эти недостатки во многом были устранены в более новом воплощении тех же идей, в протоколе Matrix. Но Matrix это нечто большее чем новый IRC, Matrix это воплощение SOA, где появляется возможность связать разные системы сообщений между собой. Таким образом пользователи Telegramm-а и Skype-а могут переписываться между собой.

Matrix

Возвращаясь к IRC. Вот список живых каналов. Установите, если ещё не установлен клиент IRC - irssi, запустите его и подключитесь к необходимому каналу:

irssi
set nick <Nickname>
/server list
/connect liberachat

Настройте irssi на автоподключение с вашим ником:

/server add -auto -network liberachat irc.libera.chat
/network add -nick <Nickname> liberachat
/channel add -auto #openSUSE liberachat

TODO: почему то не работает автоподключение к каналу, проверить; настроить автоустановку window hidelevel

Стоит так же установить подавление избыточных для нас системных оповещений о подключении и отключении пользователей:

/window hidelevel +joins +parts +quits

Вот пример моего вопроса в поддержку:

IRC

Snap

Если вдруг вам понадобиться snap, то вот инструкция его установки

Часть приложений не доступны из родных репозиториев OpenSUSE, или же обладают некоторыми недостатками, из за которых их использование затруднено. Для этого существует кросплатформенный репозиторий snap. При добавлении репозитория укажите нужный раздел вместо <DIST>. Для Tumbleweed это будет openSUSE_Tumbleweed. Выберите нужный раздел из списка. Установите и настройте систему управления пакетами snap:

sudo zypper addrepo --refresh \
  https://download.opensuse.org/repositories/system:/snappy/<DIST> \
  snappy
sudo zypper --gpg-auto-import-keys refresh
sudo zypper dup --from snappy
sudo zypper install snapd
sudo systemctl enable --now snapd
sudo systemctl enable --now snapd.apparmor

Возможно у вас останется warning по поводу разрешение на запуск snapd.apparmor

Некоторые заметки

Полезные команды терминала:

# Скачивание файла с curl
curl -O https://domain.org/file
# Поиск в файловой системе по шаблону имени файла
find /some/where -name "startsWith*"
# Сортировать фалы по кол-ву строк
find . -type f -name "*.cpp" -exec wc -l {} + | sort -rn
# Команда с помощью которой можно проверить тип системы инициализации
ps -s1 | awk '{print $4}'| grep -Ev "CMD"
# Поиск в `yum` по частичному имени пакета (CentOS)
yum search <partial-name>
# Взять `fingerprint` с ключа:
ssh-keygen -E md5 -lf id_rsa
# Скопировать файл в контейнер Docker-а
docker copy <file> <container_id>:/path
# Поиск по содержимому файлов
# TODO: дополнить комманду, добавить вариант Rnw
grep -ilR
# Монтаж папки с хоста в случае виртуалки
mount -t vboxsf share /mnt/share/
# Сборка образа CentOS
docker build -f DockerfileCentOS -t kalevala_centos .
# Сборка образа OpenSuse
docker build -f DockerfileOpenSuse -t kalevala_suse .

Папки с unit-ами systemd в OpenSuse:

  1. /etc/systemd/system/
  2. /usr/lib/systemd/system

Qt debug и release:

The project can be built in release mode or debug mode, or both. If debug and release are both specified, the last one takes effect. If you specify the debug_and_release option to build both the debug and release versions of a project, the Makefile that qmake generates includes a rule that builds both versions


При работе с командой htop вы можете изменять направление сортировки введя большую I (shift + i), но только при режиме списка (не в режиме дерева).

Термины и сокращения

  • SLES - SUSE Linux Enterprise Server
  • EOL - End Of Life
  • EPEL - Extra Packages for Enterprise Linux

Полезные ссылки

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