пʼятниця, 8 грудня 2017 р.

Лінукс готує схеми вишивок домашнім майстриням

Гарні господині вміють не лише куховарити, а й вишивати. І ручне вишивання - це мистецтво. Але гарна, але складна вишивка потребує схеми.

Попри існування серйозних комерційних продуктів для створення схем у Linux є альтернативи. Однією з них є kxstitch.

Для користувачів Ubuntu навіть не треба нічого компілювати вручну. Є готовий репозитарій PPA. Тому кроки по встановленню прості, як завжди:

$ sudo add-apt-repository ppa:ubuntuhandbook1/kxstitch $ sudo apt-get update
$ sudo apt-get install kxstitch 

Попри простоту встановлення, у мене на Xubuntu 16.04 воно не пішло. Можна розбиратися, але навіщо? Є й інші інструменти.

Crosti - ще одна достойна альтернатива. Проблем із її запуском у мене не було. Ця програма навіть є у офіційних збірках Debian/Ubuntu. Встановлення не потребує підключення зовнішніх репозитаріїв:

$ sudo apt-get install crosti

Трішки слабша, але теж цілком працездатна штучка - Cstitch. Її можна знайти на sourceforge.

Джерела:
https://sourceforge.net/projects/kxstitch/
http://cstitch.sourceforge.net/
https://sourceforge.net/projects/crosti/
http://ubuntuhandbook.org/index.php/2013/12/install-kxstitch-cross-stitch-ubuntu-ppa/

Візуалізація структури БД sqlite в Linux (не лише в Linux і не лише sqlite)

Schemacrawler logo Структури баз даних потребують документування, щоб вся команда чітко розуміла, що саме ви робите і де брати необхідні дані. Адже початківцям важко одразу зрозуміти, як саме пов'язані різні таблиці БД. І навіть, якщо ви не початківець, але проект величезний чи просто ви ознайомлюєтеся з новим для вас проектом, інформація про структуру БД краще сприймається візуально у вигляді діаграм.
Малювати такі діаграми у всіляких редакторах - марна справа. Адже при будь-якій зміні  структури вам доведеться вносити зміни й в діаграми. Це тягне більше роботи, ніж написання SQL запитів для створення такої структури.
Процес створення таких діаграм можна автоматизувати і, оскільки всі велосипеди давно вже придумані до нас, достатньо знайти потрібний інструмент.
Нещодавно я знайшов проект SchemaCrawler. Чудовий інструмент аналізу баз даних. Він працює з різними типами баз (Sqlite, MySql, Postgresql та іншими), хоча я спробував лише з Sqlite. Інструмент розповсюджуєтья за ліцензіями GNU GPL, GNU LGPL та Eclipse License. Основні можливості:
  • текстовий вивід
  • diff вигляд
  • діаграма структури
  • скрипти
  • lint - статична перевірка правильності структури (наприклад назви, які перекриваютья з ключовими словами)
  • пошук слабих асоціацій
  • плагіни
Мені потрібна була лише функція створення діаграм. Решти не перевіряв.
Отже, для роботи нам знадобиться java  (розробники рекомендують скористатися останньою версією) і власне SchemaCrawler. Його беремо на офіційному сайті в розділі завантаження.
Для діаграм додатково потрібен пакет graphviz. Він у мене вже був, але для встановлення у Linux достатньо виконати:

$ sudo apt-get install graphviz

Розпаковуємо архів SchemaCrawler. Переходимо в каталог examples/diagram. Там є приклад використання у вигляді shell скрипта. Корегуємо його, натравлюючи на нашу базу. В моєму прикладі достатньо було замінити тип БД -server=sqlite, шлях до БД -database=../../../database.sqlite та встановити користувача -user=. Ось така вийшла команда:

$ java -classpath $(echo ../../_schemacrawler/lib/*.jar | tr ' ' ':') schemacrawler.Main -server=sqlite -database=../../../database.sqlite -user= -password= -infolevel=maximum -command=schema -outputformat=pdf -outputfile=database-diagram.pdf $*

В результаті роботи виходить щось схоже на:

Джерела:
https://sualeh.github.io/SchemaCrawler/

середа, 11 жовтня 2017 р.

Підключаємо другий диск із зашифрованими даними

Виникла необхідність розширити сховище на домашньому ПК за рахунок додаткового вінчестера. Основний вінчестер зашифрований, тож хотілося б захистити дані і на додатковому. В лінуксі можна окремо шифрувати зовнішні носії.

Спочатку слід розібратися з розбивкою диску. За допомогою GParted знищуємо всі розділи і створюємо один розділ на весь диск.

УВАГА! Операція потенційно небезпечна. Слідкуйте, на якому саме диску ви проводите зміну розділів.

Далі починається процес форматування шифрованого розділу (замість sdb1 використайте свій розділ):

$ sudo cryptsetup -y -v luksFormat /dev/sdb1

Відкриваємо щойно відформатований шифрований розділ:

$ sudo cryptsetup luksOpen /dev/sdb1 sdb1_crypt

Форматуємо його вже у звичайній файловій системі наприклад ext4:

$ sudo mkfs.ext4 /dev/mapper/sdb1_crypt

Примонтовуємо щойно відформатовану файлову систему:

$ sudo mount /dev/mapper/sdb1_crypt /mnt

Оце, власне і все. Та є одне "але". При кожному запуску системи необхідно повторювати кроки відкриття шифрованого розділу і монтування файлової системи. А це доволі набридливо. Тому варто забезпечити автоматичне підключення такого диску при запуску системи.

Перш за все потрібен файл ключа, аналог пароля для ручного введення. Тож створюємо його і одразу обмежуємо доступ:

$ sudo dd if=/dev/urandom of=/root/.keyfile bs=1024 count=4
$ sudo chmod 0400 /root/.keyfile

Потім додаємо цей випадковий щойно створений ключ в допустимі ключі для відкриття шифрованого розділу:

$ sudo cryptsetup luksAddKey /dev/sdb1 /root/.keyfile

Наступний крок - додаємо запис в правила автоматичного підключення шифрованих дисків у файл /etc/crypttab:

sdb1_crypt UUID="<device UUID>" /root/.keyfile luks,discard

Звідки взяти <device UUID>? Все просто:

$ sudo blkid

Значення, яке ми шукаємо, це UUID пристрою /dev/sdb1, а не /dev/mapper/sdb1_crypt. Також прослідкуйте, що берете UUID, а не PARTUUID.

І на останок прописуємо автоматичне монтування файлової системи в потрібний нам каталог. Робимо запис у /etc/fstab такого типу:

/dev/mapper/sdb1_crypt  /mnt   ext4    defaults        0       2

Відправляємо комп'ютер на перезапуск і перевіряємо, чи все працює так, як ми хотіли.

Джерела:
https://davidyat.es/2015/04/03/encrypting-a-second-hard-drive-on-ubuntu-14-10-post-install/

пʼятниця, 29 вересня 2017 р.

Кроскомпіляція під ARM без використання QEMU


Розгорнути повноцінну рідну компіляцію на маленьких вбудованих одноплатних комп'ютерах майже неможливо через обмеженість ресурсів таких пристроїв. Тому часто використовують кроскомпіляцію на стаціонарних ПК.

Поширеним методом кроскомпіляції під архітектуру arm є використання chroot + qemu. Метод прийнятний, але ну ду-у-у-же повільний. Навіть за наявності доволі продуктивного процесора така кроскомпіляція в десятки, а то й сотні разів повільніша за рідну компіляцію.
Та існує ще один метод кроскомпіляції - використання підходу debian multiarch та кроскомпілятора, який працює на архітектурі x86, але формує код під архітектуру arm.
Розгортання такого кроскомпілятора виконуємо однією командою:

apt-get install crossbuild-essential-armhf

Якщо тепер використати замість g++ компілятор arm-linux-gnueabihf-g++, то отримаємо код, який можна запускати на arm процесорі. При цьому швидкість компіляції співрозмірна, а через потужніший процесор часто й швидша за рідну.

Цього цілком достатньо для простих програм, які не потребують зовнішніх бібліотек. Що робити, якщо нам треба скомпонувати код із іншими бібліотеками? Тут стане у пригоді multiarch. Все, що необхідно - це доставити необхідні *-dev бібліотеки бажаної архітектури (спочатку її слід активувати). Припустимо, що наша програма використовує бібліотеку wxWidgets. Тоді послідовність наших дій по розгортанню необхідного середовища розробки виглядатиме приблизно так:

dpkg --add-architecture armhf
apt-get update  && apt-get dist-upgrade
apt-get install libwxgtk3.0-dev:armhf

Далі можна преспокійно компілювати програму з використанням wxWidgets під сторонню архітектуру за допомогою arm-linux-gnueabihf-g++. Цей компілятор самостійно спробує підключити бібліотеки необхідної архітектури.
Залишиться лише перевірити працездатність такої програми на одноплатному ПК.

неділя, 3 вересня 2017 р.

SSHFS - мережевий диск через SSH


При налаштуванні серверів по SSH часто виникає потреба редагування файлів. Для цього існують консольні редактори. Та їхній функціонал часто недостатній, функції пошуку і заміни часто не очевидні або неповноцінні. Також трапляються ситуації, коли необхідно обмінятися файлами між віддаленим сервером і локальним ПК. Таке переписування теж не дуже зручне, бо потребує набирання команд в консолі і необхідною умовою є необхідність однозначно вказувати шляхи до файлів.

Значно зручніше підключити файлову систему сервера як мережевий диск. Для цього існує спеціальна файлова система SSHFS (до речі, для Windows теж є рішення з підключення SSHFS, але тут ми його не розглядатимемо).

Почнемо, як завжди, зі встановлення необхідного пакету:

$ sudo apt-get install sshfs

Це, власне, і все. Можна користуватися. Для одноразового підключення можна використати команду на кшталт:

$ sudo sshfs -o allow_other,defer_permissions user@host:/remote_dir /mnt/local_dir

На Ubuntu опція defer_permissions, схоже, відсутня і викликає помилку "fuse: unknown option `defer_permissions'", але її не так вже й треба. Тому її слід забрати. В результаті можливі проблеми з правами доступу, якщо UID власника файлу на сервері не відповідає UID локального користувача. Втім, опція "-o uid=NNN" вирішить ймовірні проблеми з правами доступу до отриманих файлів.

Для регулярного підключення до сервера за допомогою SSHFS краще використати файл /etc/fstab і налаштувати перманентні правила монтування. Для цього додаємо у /etc/fstab рядочок типу:

sshfs#user@host:/remote_dir /mnt/local_dir fuse defaults,allow_other 0 0

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

$ sudo mount /mnt/local_dir

А відключення відповідно:

$ sudo umount /mnt/local_dir

Звичайно, для будь-якого підключення необхідно знати і ввести пароль користувача SSH.

Для використання таких з'єднань у графічному середовищі варто доставити утиліту ssh-askpass.

$ sudo apt-get install ssh-askpass

В такому випадку при кліку на каталог, який є мережевим, з'являтиметься діалог введення паролю.

Джерела:
https://www.digitalocean.com/community/tutorials/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh

субота, 26 серпня 2017 р.

Одного разу... не стало WiFi

Давно вже я не перевстановлював Linux з нуля. Все оновлення та й оновлення. Та ось трапилася халепа. Після одного чищення системи від непотребу (навіть не знаю коли саме) у мене пропала іконка під'єднання до мережі WiFi. В менеджері мережевих з'єднань навіть не було опції "увімкнути WiFi".

Я вже було подумав, що згорів модуль. Але перевірив налаштування BIOS - там все гаразд. Потім подивився:

$ lspci | grep Network
06:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)

Виглядає так, що контролер на місці і ядро навіть успішно його розпізнало.

У чому ж річ?

Виявляється я випадково знищив пакет драйверів для бездротових адаптерів Broadcom. Можливо це сталося в результаті одного з оновлень. В будь-якому разі відновлення роботи WiFi в такому випадку не надто складне:

$ sudo apt-get install bcmwl-kernel-source

Після встановлення варто перезапустити систему.

Джерела:

пʼятниця, 25 серпня 2017 р.

gobby - спільне редагування текстів

Спільна розробка текстових файлів - популярний сервіс в інтернеті (найвідомішим є, мабуть, GoogleDocs). Сервіс також вмонтований в деякі офісні редактори (AbiWord).

Та ось я знайшов редактор, який може працювати автономно в локальній мережі. А за наявності правильно підготовленого в мережі сервера (можливо, колись опишу, як його налаштувати) може працювати незалежно від робочих станцій користувачів, адже сервер завжди доступний і може надавати доступ для розробників документів в зручний для них час.

Називається цей редактор gobby.

По суті це звичайний редактор коду з підсвіткою багатьох типів синтаксису. Основною його перевагою є спільне редагування (одночасно кілька осіб працюють в одному документі і кожен бачить зміни інших в реальному часі). Дуже схоже на GoogleDocs.

Переважно цей редактор розрахований на спільне редагування коду, але думаю, що ним можна розробляти багато інших документів, які не потребують жодних картинок, а лише текст. Це можуть бути крім коду документи в стилі переліків необхідних робіт, засобів, планів виконання завдань чи навіть законопроектів, над якими працює ціла команда одночасно.

В редактор інтегровано чат, тож можна переписуватися з колегами, які працюють з тим самим документом.
Процедура встановлення gobby:

$ sudo apt-get install gobby

Джерела: