середа, 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.

Джерела:
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

Джерела:

неділя, 13 серпня 2017 р.

ooofbtools - створюємо fb2 книгу


У попередньому дописі я описав, як використовувати автоматичне розпізнавання djvu файлів за допомогою tesseract.

Після кропіткої роботи по вичитуванню розпізнаного тексту і виправлення помилок настав час створити з нього електронну книгу.
Для цього існує непоганий і доволі легкий у використанні додаток до LibreOffice. Називається він fbtools або по-старому OOoFBTools. Його встановлення просте, як двері - за допомогою Extension Manager. Навіть не описуватиму.

Використання ще простіше. Адже всі функції зібрані в меню OOoFBTools:
  • Є стандартні секції. Треба лише позначити назви розділів як заголовки, а також правильно розділити абзаци.
  • Можна вставляти картинки.  Правда варто слідкувати за їхнім розміром, щоб кінцевий fb2 не вийшов занадто великим.
  • Є можливість редагувати мета-параметри (автор, редактор, жанр тощо)
  • Також є можливість створення зносок. Та я цієї функції не перевіряв.
  • І, зрештою, найголовніша опція - експорт у файл fb2.
В результаті отримуємо цілком придатну для читання електронну книжку формату fb2:

пʼятниця, 28 липня 2017 р.

tesseract - читаємо друковані тексти (OCR)

Розпізнавання текстів та автоматизація цього процесу цілком легко вирішується в Linux. Існує дві поширені програми розпізнавання: cuneiform та tesseract. Вони призначені для роботи в терміналі, але них для використання в графічному середовищі існує агрегатор yagf, який вміє працювати з обидвома двигунами.

А все почалося з того, що я знайшов книжку у форматі djvu, яку хотів дати дітям почитати на електронній книжці. Нажаль пошуки електронного варіанту в fb2, txt або інших форматах електронних книг були неуспішні.

Я вирішив виправити цей недолік, адже книжка цікава. І у мене був сканований  україномовний її варіант.

Відразу зауважу, що з cuneiform у мене не склалося через помилки при запуску, хоча я точно пам'ятаю, що колись давно користувався саме нею і при тому дуже успішно. Yagf теж не вдалося запустити. Та я й не розбирався чому саме. Адже в консолі все вирішується за лічені хвилини.

Що ж. Почнемо. Для початку слід встановити необхідне ПЗ. Це - система управління файлами djvu (упаковка-розпаковка), а також система tesseract-ocr та український мовний пакет:

$ sudo apt-get install djvulibre-bin tesseract-ocr tesseract-ocr-ukr

Наступним кроком  потрібно поділити djvu файл на окремі графічні файли сторінок:

$ ddjvu -format=tiff -eachpage filename.djvu page%d.tiff

Тепер ми матимемо 260 (у моєму випадку) окремих файлів - по одному на кожну сторінку. Залишилося натравити на них розпізнавач і об'єднати результати у текстовому файлі. Для цього я написав мікроскрипт (кількість сторінок слід поправити в тілі скрипта):

#!/bin/bash
        for i in `seq 1 260`;
        do
  tesseract ./page$i.tiff stdout -psm 6 -l ukr >> book.txt
        done

Запустивши його, йдемо пити чай-каву. Після coffe-break отримуємо txt файл. Залишилося дрібничка - прочитати і скоригувати помилки розпізнавання. А далі скрутити все це в гарну електронну книжку формату fb2. Але це вже інша історія, якою, сподіваюся, незабаром поділитися.

Джерела: