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

debootstrap - розгортаємо ARM середовище Debian Jessie


Нещодавно я писав про NanoPI - малюсінькій комп'ютер за порівняно смішну ціну. І ось настав момент написання програми для нього. Звичайно, найпростіше - перекинути код на нього і прямо на ньому зібрати. Та для великих проектів компіляторові треба доволі багато пам'яті. А вона є на більших x86 комп'ютерах. Та й вони більш поширені, ніж ARM-базовані. Тож частіше можуть трапитися під рукою.

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

Встановлюємо утиліту debootstrap
sudo apt-get install debootstrap

Встановлюємо пакети архітектури armhf з дистрибутиву jessie у каталог jessie-armhf без виконання другої фази (second-stage) розгортання системи
sudo debootstrap --foreign --arch=armhf jessie jessie-armhf

Встановлюємо QEMU
sudo apt-get install qemu-user-static

Копіюємо qemu для імітації arm процесора в каталог встановлення дистрибутиву
sudo cp /usr/bin/qemu-arm-static jessie-armhf/usr/bin/

Для доступу до інтернету
sudo cp /etc/resolv.conf jessie-armhf/etc/

Переходимо в каталог дистрибутиву в режимі chroot
sudo chroot jessie-armhf/

Запускаємо другу фазу розгортання системи. Тут пакети довстановлюються в режимі arm
debootstrap/debootstrap --second-stage

Оновлюємо джерела для apt
cat > /etc/apt/sources.list << EOF
deb http://ftp.de.debian.org/debian jessie main contrib non-free
deb http://ftp.de.debian.org/debian jessie-updates main contrib non-free
deb http://security.debian.org/debian-security jessie/updates main contrib non-free
EOF

Оновлюємо щойно розгорнуту систему
apt-get update  && apt-get dist-upgrade

Якщо побачили таке при переході в chroot
I have no name!@host$
то є два варіанти
chmod 0644 /etc/passwd
а якщо не допомогло, то
rm /etc/passwd-

Ну далі налаштовуємо компілятори, бібліотеки і решту непотребу, щоб забезпечити роботу gcc.
apt-get install build-essential

Джерела:

неділя, 2 липня 2017 р.

Palemoon - браузер для non SSE2 процесорів


У попередньому дописі я описав один з дистрибутивів, які підходять для використання на застарілому залізі. Та якщо у вас процесор, що не підтримує інструкції SSE2, то з веб серфінгом періодично матимете негаразди. Адже всі сучасні браузери розробляються з розрахунку лише на процесори з підтримкою команд SSE2. Чи не всі? Виявляється є ентузіасти, які все ж думають про старе залізяччя. Браузер palemoon - одне з їхніх творінь.
Але спершу визначимо, чи варто нам взагалі шукати SSE only браузер. В консолі введемо

$ lscpu

Побачимо купу інформації про наш процесор. Але нас цікавить лише поле Flags. У ньому вказано перелік типів інструкції, які підтримує процесор. Якщо в переліку є sse2, то цей допис вам не потрібен. Ось, що я побачив у себе:

Architecture:          i686
CPU op-mode(s):        32-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             AuthenticAMD
CPU family:            6
Model:                 8
Model name:            AMD Sempron(tm)
Stepping:              1
CPU MHz:               1197.000
CPU max MHz:           1197,0000
CPU min MHz:           747,0000
BogoMIPS:              2405.37
Hypervisor vendor:     (null)
Virtualization type:   full
L1d cache:             64K
L1i cache:             64K
L2 cache:              256K
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow vmmcall



Як бачимо з SSE2 мені не повезло (у переліку є лише sse, але немає sse2). Оце і є причина "бочки меду в ложці дьогтю". І онаками її при роботі є не так повільна робота браузера, як періодичні безпричинні аварійні завершення програми. Це так дратує! Різні браузери збоять на різних сайтах. І якщо глянути в логи, то часом можна помітити повідомлення "Illegal instruction". Пошукавши в інтернеті, чи є браузери для старих CPU натрапив на palemoon SSE версію. Його немає в офіційних репозитаріях дистрибутивів. Але на офіційному сайті програми є готова збірка під 32 бітну ОС Linux. Це просто архів, розміром майже 40 Мб. Розпаковуємо його, де зручно, і користуємося. Можна встановлювати для всіх користувачів системи. Дії після скачування приблизно такі:

$ sudo tar -C /opt -xvf palemoon-27.3.0SSE.linux-i686.tar.bz2
$ sudo ln -s /opt/palemoon/palemoon /usr/bin/palemoon

PS. Поки готував цей допис мій palemoon жодного разу не гепнувся.

Джерела:
https://forum.palemoon.org/viewtopic.php?f=40&t=13530
ftp://ftp.palemoon.org/SSE-Linux/
http://palemoon.org

четвер, 29 червня 2017 р.

Бодін лінукс - краса і мінімалізм

Однією з проблем масового переходу на лінукс є те, що користувачі старих ПК лякаються погіршення швидкодії своїх систем через перехід на нове ПЗ.

Ось і я давно шукав лінукс для своїх старих ПК. Перепробував декілька варіантів (Xubuntu, Lubuntu, Debian з різними середовищами, Puppy тощо). Всі вони мають добрі й погані риси. З кожним оновленням старому комп'ютерові стає все тяжче і тяжче. Втім, тяжчими стають програми для доступу в інтернет (firefox, chromium). 

І от нещодавно примітив щось нове - Бодін Лінукс (Bodhi Linux). Дистрибутив - заснований на тому ж Ubuntu LTE. Але як виявилося доволі гарний і зручний. А найголовніше - мінімалістичний. В ньому не знайдеш купу сервісів, які невідомо чим займаються. Він не завантажує море бібліотек про всяк випадок. Він використовує кеш в ОЗП для пришвидшення роботи. І, найголовніше, він використовує стандартні репозитарії Ubuntu. А це означає, що всі існуючі в ньому програми доступні для встановлення через apt-get.

Відразу зауважу, що цей текст я пишу з Bohdi Linux + Firefox.

Вводимо uname -a і бачимо:
Linux username 3.16.0-4-586 #1 Ubuntu 3.16.7-ckt25-2 (2016-04-08) i686 athlon i686 GNU/Linux

Подивимося cat /etc/lsb-release:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Bodhi Linux"


Я свідомо взяв Legacy варіант, щоб він краще працював на старенькому Atlon з 512Мб ОЗП. І працює від доволі непогано.

Центр керування пакетами теж специфічний - це просто веб-сайт, на якому є ссилки на рекомендовані пакети з кожної категорії. А, оскільки в центрі керування використовується браузер Midori, то клацнувши на ссилку можна відразу встановити пакет. На сайті почитати опис пакету, побачити знімки з екрану, а також відразу можна проголосувати за улюблений пакет, таким чином піднявши рейтинг більш корисних пакетів. І працює цей механізм на кілька порядків краще, ніж центр управління пакетами Ubuntu. Нічого зайвого, а найкорисніше зверху.

Після встановлення ви не матимете більшості програм. Всі їх треба доставляти. Але собі ви поставите лише те, що треба саме вам. Плюс є можливість створити свій дистрибутив відразу зі свого робочого ПК як зріз встановлених програм. Щоправда я ще не випробував цей механізм. Як робочий стіл використовується середовище Moksha - дуже легеньке, доволі приємне і з можливістю одним кліком змінювати оформлення. Це вражає. Єдине, чого не підтримує Moksha - це іконки на робочому столі, але трішки призвичаївшись помічаєш, що вони не такі вже й потрібні, бо є QuickLauncher, клавіатурні скорочення, Автозапуск і пошук серед усіх програм.

Програми, яких немає в центрі керування пакетами можна спокійно встановити через термінал за допомогою apt-get чи dpkg.

Де ложка дьогтю? Періодичні збої браузерів через невідповідність процесора. Тут допоможе лише Gentoo, коли все скомпільовано під потрібний процесор. Але в цілому Бодін Лінукс, схоже, вдихнув нове життя в старе залізо.

Джерела:

субота, 17 червня 2017 р.

wxHexEditor та доктор Уотсон

Розробникам часто потрібен нормальний редактор шістнадцядкового коду. Чи є такий інструмент в Лінуксі? Відповідь на це питання дасть команда:

sudo apt-get install wxhexeditor

Та оскільки він написаний на WxWidgets, то, я певен, він є і для Windows, й для MacOS.
Серед особливостей:
  • підтримка величезних файлів (2 ексабайт)
  • зручні пошук та заміна
  • декодування в різних системах числення
  • дизасемлювання
  • історія з можливістю відкату.

Але до чого тут доктор Уотсон?

Історія така: була в мене старенька програма (не буду рекламувати), написана під DOS, яка працювала з LPT портами. Але лише стандартними на адресах 0x0378 (LPT1), 0x0278 (LPT2), 0x03B8 (LPT3). Та ноутбуків з LPT портом вже не зустрінеш. Замість них використовуються різні перехідники USB-LPT, PCMCIA-LPT. А у них адреси портів вже зовсім не стандартні (В моєму випадку 0xFFD8).

Як же заставити працювати цю стару програму з нестандартними портами? Елементарно, Уотсоне, - за допомогою wxHexEditor.

1. Знаючи, що для керування LPT викристовуються адреси 0x0278-0x027F, 0x0378-0x037F було вирішено відшукати в коді всі звернення до цих адрес. Я обмежився лише основними регістрами. Вийшла табличка типу:

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

3. Робимо заміну для прикладу всі послідовності 78 03 на D8 FF (у нашого пристрою діапазон адрес 0xFFD8-0xFFDF), а також 79 03 на D9 FF і 7A 03 на DA FF.

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

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

Джерела:

вівторок, 30 травня 2017 р.

NanoPI первинний запуск

Послав мені Бог до рук МініПК за 10$ (в Україні, нажаль, трохи дорожче) NanoPi Neo 512M. Це повноцінний ПК з RAM=512M, що працює під керуванням ОС Linux і має розміри плати лише якихось 40х40 мм. Але він без відеовиходу і Flash-пам'яті. Тож до нього довелося докупити microSD (16Gb). Для роботи необхідно записати зображення ОС на microSD. Для цього в Linux виконуємо такі нехитрі команди:
$ unzip nanopi-neo_debian-nas-jessie_4.11.2_20170525.img.zip | dd bs=1M of=/dev/mmcblk0 status=progress
$ sync

Вставляємо отриману microSD у відповідний слот NanoPI, подаємо живлення і насолоджуємося блиманням світлодіода, що відповідає за індикацію роботи. Підключивши прилад до мережі я виявив, що він не прописаний на DHCP сервері (а прив'язка у ньому зроблена до MAC-адрес), тому постала задача визначити, яка ж ця MAC-адреса в цього екземпляра NanoPI. З боку DHCP сервера я вирішив переглянути, кому в мережі не вдалося отримати IP-адресу. Команда перегляду логів:
$ cat /var/log/syslog | grep DHCPDISCOVER
Видала вона щось схоже на:
May 30 08:57:08 nvcamc dhcpd: DHCPDISCOVER from 00:11:2f:82:e2:a2 via eth0 May 30 10:06:03 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:13:58 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:02 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:12 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases May 30 10:14:21 nvcamc dhcpd: DHCPDISCOVER from 02:81:ca:d4:e6:44 via eth0: network 192.168.0.0/24: no free leases

Тепер зрозуміло, хто "незаконно" підключився до мережі і хоче мати IP. Після внесення необхідних зміна на DHCP сервері мініПК успішно отримав IP-адресу і став доступний для роботи по мережі. Перевіряємо, його роботу через веб-інтерфейс за адресою http://xxx.xxx.xxx.xxx:8888:
Так! Воно працює. Доступ до мальоти є також по ssh, та через openmediavault (який працює на 80-му порті веб-сервера NanoPI).

четвер, 11 травня 2017 р.

OSM tile server

GoogleMaps візуалізація - гарна річ для вашого веб проекту. Але що робити тим, хто хоче скористатися мапами в локальній мережі без доступу до інтернет? openstreetmap.org - відкрита мапа світу - проект, де кожен може внести свій вклад у її розвиток, а також скористатися результатами роботи спільноти. Та на сайті застерігають від грубої закачки великих об'ємів даних через непомірне навантаження на сервери. Натомість рекомендують створити власний tile-сервер. Це може бути будь-який веб-сервер, з розміщеними на ньому картинками - шматочками мапи з різними рівнями деталізації або повноцінна рендер-система. Розгортання одного з таких tile-серверів попри не складний процес змарнувало мені купу часу. Розмістивши його в локальній мережі я отримав можливість використання мап без доступу до інтернет. Ось послідовність кроків для Xubuntu 16.04 LTS.

Я обійшовся звичайним ноутбуком з ОЗП=2Гб, HDD>120Гб та 2-ядерним процесором.

1. Скачуємо останню версію необхідної нам вибірки з цілої планети із сайту http://download.geofabrik.de/europe/ukraine.html

wget http://download.geofabrik.de/europe/ukraine-latest.osm.pbf

2. Встановлюємо необхідне ПЗ, створюємо БД та імпортуємо дані. Саме так - вся інформація для побудови мапи будь-якої деталізації міститиметься в нашій базі даних PostgreSQL.

sudo apt install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2 openstreetmap-carto osm2psql
sudo -u postgres -i
createuser osm
createdb -E UTF8 -O osm gis
psql -c "CREATE EXTENSION hstore;" -d gis psql -c "CREATE EXTENSION postgis;" -d gis 
su - osm
/usr/share/openstreetmap-carto-common/get-shapefiles.sh 
osm2pgsql --slim --flat-nodes tempnodes.bin -C 1000 ukraine-latest.osm.pbf
 
3. Фіксаємо помилки недостаючих шрифтів:
sudo sed -i 's|<Font face-name="Arundina Sans Bold"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Arundina Sans Italic"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Arundina Sans Regular"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Droid Sans Fallback Regular"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="gargi Medium"/>||g' /usr/share/openstreetmap-carto-common/style.xml sudo sed -i 's|<Font face-name="Mallige Bold"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Mallige Normal"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Mallige NormalItalic"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Mukti Narrow Bold"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Mukti Narrow Regular"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Tibetan Machine Uni Regular"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="TSCu_Paranar Bold"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="TSCu_Paranar Italic"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="TSCu_Paranar Regular"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="Unifont Medium"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|<Font face-name="unifont Medium"/>||g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|minzoom|minimum-scale-denominator|g' /usr/share/openstreetmap-carto-common/style.xml
sudo sed -i 's|maxzoom|maximum-scale-denominator|g' /usr/share/openstreetmap-carto-common/style.xml
 
4. Корегуємо параметри генерації у файлі generate_tiles.py:
bbox = (22.1288, 44.3904, 40.2181, 52.3754)
style = /usr/share/openstreetmap-carto-common/style.xml

 
5. Створюємо tile_dir:
mkdir ~/osm/tiles -p
 
6. Запускаємо генерацію тайлів:
python ./generate-tiles.py


 
Процес, як виявилося, не такий вже й швидкий. На створення zoomlevel від 0 до 12 у мене пішло 4 доби. Згенеровано близько 150Мб даних. Запускав генерацію частинами для різних рівнів деталізації, але майже без зупинок.

Хто не хоче проходити весь процес, може скористатися вже згенерованими даними, скачавши торент. Максимальної деталізація zoomlevel=12 і є приклад використання OpenLayers.

OpenLayers - JavaScript фреймворк, що дозволяє використовувати дані OpenStreetMap, GoogleMaps та інші у веб-проектах. Власне саме на цій бібліотеці зроблений приклад, що міститься в роздачі.

Побіжно скажу кілька слів про проект OpenStreetMap. На основі даних цього проекту засновано кілька цікавих проектів. Варто звернути увагу на opencyclemap.org - топографічна карта (з ізолініями висот) для туристів. OsmAnd~ - автомобільний навігатор для пристроїв з Andoid, що використовує offline векторні мапи імпортовані з проекту OpenStreetMap.

Джерела:
http://hcmc.uvic.ca/blogs/index.php?blog=11&p=13959&more=1&c=1&tb=1&pb=1
https://github.com/openstreetmap/mapnik-stylesheets
http://bboxfinder.com 
https://f-droid.org/repository/browse/?fdfilter=osmand&fdid=net.osmand.plus 

пʼятниця, 21 квітня 2017 р.

vokoscreen - Краще один раз побачити, ніж 100 разів почути

Запис відео з екранів - один з найкращих методів наочно показати дії оператора ПК. Одна з найзручніших і безкоштовних програм для Linux в цьому плані - vokoscreen. Простий та зрозумілий інтефейс, повноекранна робота, робота з довільною областю екрану, або з певним вікном, підказка операцій з клавіатурою, збільшення та запис звуку вигідно виділяють цю програму серед інших. Є можливість увімкнути камеру і показати автора в окремому вікні. Відсутні обмеження на час запису. Що ще треба для створення повноцінних екранних роликів?
Правильно - лише встановити потрібну програму. А це робиться, як завжди, тривіально:

$ sudo apt-get install vokoscreen

Поки записував демонстрацію, знайшов один мінус: підказка клавіатури не працює з кирилицею. Та оскільки проект розміщений на github, Ви можете самостійно внести корекції в нього.
Джерела:
https://github.com/vkohaupt/vokoscreen
http://www.kohaupt-online.de/hp/