правильний підрахунок uptime


отже, що не так з uptime? а те, що програма намагається говорити «людською» мовою, через що формат виводу міняється: може бути опущено дні та години (знайдіть години на знятку екрана).

забагато мороки пробувати різати той вивід регулярними виразами, простіше застосувати трішки арифметики до вмісту /proc/uptime.

не виспався, але байдуже. на bashтані буде спекотно сьогодні: зараз навчимося розбирати вивід команди uptime на лексеми і зберігати дані не в жорстко кодованих змінних, а в загальному масиві з мітками.

дилетант запитає: з розбором зрозуміло, але навіщо ці складнощі з масивами?! а припустімо, мій простенький монітор збиратиме й показуватиме сто параметрів, і зненацька знадобилося додати ще десять. за примітивного підходу для цього довелося б:
  • розібрати вивід ще кількох команд на кшталт uptime і скласти дані в десять нових змінних;
  • додати десять нових міток до шаблонів виводу;
  • додати десять нових замін до функції підстановки даних в шаблони.
перший етап — цікава задачка. другий — просто питання дизайну виводу. а третій етап — це дурна робота, і її можна повністю уникнути, якщо складати дані як іменовані поля до одного архіву. тоді функція підстановки даних за шаблоном перетворюється з величезного переліку міток і замін… на один короткий (в коді) і читабельний цикл (про це — згодом).

важливо! цей код — лише ілюстрація принципу; вивід uptime надто волатильний, щоби його так розбирати для реальної задачі — краще обчислювати з даних у /proc/uptime.

код на pastebin:
на годиннику 00:42, але щось не спиться. отже, вивід за шаблонами і в кольорах — це дуже, дуже просто. взірець коду bash на pastebin, результат — на знятку екрана.

є нюанси:
  • проста табуляція тексту в інвертованих кольорах (tput rev) — не функциклює;
  • якусь складнішу табуляцію, яку досить просто зробити за допомогою printf — зовсім не так просто зробити, якщо форматувати весь рядок для printf завчасу;
  • перемикання кольору — це escape-послідовності по 4 байти… відповідно визначення довжини рядка для, скажімо, центрування — не працюватиме як слід;
  • може ще через щось ще не перечепився…



лінійка для консолі

якщо комусь колись виникала потреба поміряти ширину консолі — то він, певно, накидав на колінці якийсь простенький скрипт для того…

…от і мені знадобилося =)

p.s. тут є досвічені баштанники? що можна спростити чи оптимізувати? зайвість SCREEN_WIDTH бачу, що ще?



накидав у bash’і дуже грубий макет того, що хочеться бачити в моніторі статусу сервера (як на мої примітивні потреби).

тут ще бракує деталей (використання процесора, для прикладу), і виглядає зовсім не так, як треба (зі знятку має бути очевидно, що я ще не робираю як слід дані, це майже просто вивід df, free, docker ps тощо). але на макеті я трохи краще зрозумів, що хочеться мати перед очима:
  • викинути к бісу «простирадло» процесів (top, htop, atop тощо) — воно заважає; потрібна лише інформація про найжадібніші до процесора/пам’яті та зомбі;
  • читати всі потрібні дані за один захід, за потреби — дистанційно по ssh, потім повністю розпарсити їх, щоби довільно форматувати вивід і накладати кольори;
  • використати колір для кодування попереджень та тривог, псевдографіку та spark-подібні графіки для більшої наглядности (підняти з архівів свій напівзавершений gauge);
  • ущільнити вивід, додавши деталей — але не жертвуючи читабельністю (дивлюся на atop і ридаю); можливо — використати шаблони, щоби можна було складати довільні виводи «під себе».
p.s. код макету не показую, бо воно страшне, на коліні зліплене. вже коли та якщо зроблю щось путнє — ділитимуся.

оновлено (17 липня 2019). хороше нагадування від товариша: почитати, нарешті, про zabbix та спробувати.
шукав консольний монітор системи, щоби можна було налаштувати під себе і бачити основні показники (пам’ять, диски, найжадібніші процеси тощо) на одному екрані — знайшов glances, і на словах воно гарне…

…а на практиці — це python, роздутий різними функціями до сферичної форми. в переліку залежностей — навіть якісь шрифти (wft!), javascript та… сервер іксів, заради всього святого!

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

і друге питання, важливіше (точніше, перше на знятку екрана): декілька пакунків apt вважає сиротами і пропонує їх прибрати (за допомогою autoremove), але! ці пакунки, якщо я не помиляюся, було встановлено разом з docker-compose, який я згодом замінив завантаженим вручну (бо версія від debian така стара, що не пітримує docker-compose.yml версії 2.x). отже, питання: to autoremove or not to autoremove?

поновлено (15 липня 2019). гаразд, але ж ми маємо docker? отже, що ми бачимо?
  • найбільша проблема — python? контейнер «розкручує» процесор до 80% (див. зняток), без нього — процесор «відпочиває» на 0,6% в середньому;
  • є великі проблеми з форматуванням виводу;
  • показує казна що в розділі про файлові системи file sys (контейнер?)
коротше кажучи, glances гарненьке, але для використання на мінімалістичному сервері — непридатне. в топку!
трохи наморочився і потрусив бубном, але… traefik + owncloud працюють в контейнерах docker на домашньому сервері.

до речі, інструкція до встановлення на сайті owncloud чудова… але не працює. читати обов’язково, для розуміння, як воно робиться, — але вона містить помилки:
  • код owncloud/docker-compose.yml не відформатований, через що контейнер не підніметься;
  • порт, на який передресовано owncloud.example.com (в моєму випадку ім’я від duckdns.org) — 80, але owncloud в контейнері слухатиме 8080, тож у веб-оглядачі побачимо лише bad gateway;
  • сховище owncloud поза контейнером, включно з налаштуваннями, тому… якщо була спроба за першою підказкою (без traefik), то встановлення (тимчасового) паролю admin/admin в docker-compose.yml або .env до лампочки — діятиме те, що вже збереглося раніше.
в підсумку — працює, але треба додати пам’яті, бо 2 гб для owncloud — малувато. ну і не забути перенести /var на окремий диск, так.

до речі, клієнт owncloud для android коштує $0,99 в google play — небагато, але навіщо платити, якщо на f-droid можна взяти задарма й легально?

p.s. і так, docker — це зручно, виявляється.
вчора придбав жорсткий диск для сервера, але не мав запасного кабеля sata, тож вранці позичив у колег на роботі — взяли з аварійного запасу.

а як ішов на обід, випадково побачив у коридорі навірозібраний комп’ютер — наші ж поклали в спеціально призначеному місці, щоби його викинули на звалище. зазирнув, і… забрав собі три кабелі sata і дві планки пам’яті по 2 гб. забрав би ще й жорсткий диск… але мені вже наче й не треба?

дивний він, цей світ.

оновлено (15 липня 2019). пам’ять, здається, неробоча — сервер не «завівся» з нею. довелося придбати (задешево, звісно ж) 4 планки по 2 гб, маю тепер вісім гб оперативки; для домашнього серверочка це більш ніж досить.

розрахунок за допомогою веб калькулятора outervision.com показує*, що мій маленький сервер коштуватиме мені орієнтовно $6,30 на місяць додатково до рахунку за електроенергію.

не малинка, але терпимо.

якщо зупиняти сервер на ніч — можна зменшити до $4,15 на місяць, відключити dvd-rom і додати другий жорсткий диск — $3,85.

це все, звісно, «сферичний кінь у вакуумі». побачу, що в середньому покаже звіт hydro québec за місяць споживання.

* тут треба врахувати, що сайт лічить за цінами сша (11 центів за квт•г), але я перераховую на канадійські (в нас 7 центів за квт•г з урахуванням податків).
поки що перелік потрібних мені сервісів у контейнерах docker, з урахуванням досвіду з owncloud, виглядає так:
  • traefik (зворотній проксі);
  • owncloud (синхронізація файлів);
  • pihole (dns проксі для фільтрації реклами та блокування різних вконтактів)
окремо, не в контейнері, стоїть webmin (адміністрування сервера через веб-інтерфейс).

але є одне питання: припустімо, я хочу додати ще один контейнер з сервісом dlna для роздачі файлів, складених на owncloud, на інші пристрої (телевізор)… де шукати файли? підказка зі встановлення owncloud в контейнері стверджує, що вони мають бути в /var/lib/docker/volumes — але ніт, порожньо!

поновлено (11 липня 2019). stupid me: /var/lib/docker таки повен цікавого, але все у власності root’а і сховане від решти. гаразд, одну проблему вирішено, на черзі traefik та ssl/tls. і, до речі, нагадування собі: не забути винести /var на окремий диск (коли додам).

читати:
комп'ютер з debian без монітора — ще не сервер: від нього жодної користі. потрібні якісь сервіси. мені хотілося їх віртуалізувати, а не встановлювати просто на debian — щоби за потреби (поламаю ж обов'язково) видалити/перевстановити, не займаючи самої операційної системи.

спинюся на docker'і: має бути відносно просте, легке з точки зору ресурсів і абстраговане. дякую за підказки в коментарях. для початку запустив… owncloud. ну, давно хотів спробувати.

на диво — працює, але…

лише по http. як додати ssl/tls — не втну… розробники пишуть, що «з коробки» має працювати з самопідписаним сертифікатом безпеки, але дзуськи — https не відкривається, і це природньо, бо навіть порт для нього (443) в конфігах ніде не згадується.

зайве казати, що без шифрування з'єднання такий сервіс, як owncloud — це відкрите запрошення зґвалтувати хакнути =/ при цьому, на офіційному сайті інструкція зі встановлення контейнера навіть не згадує шифрування. поруч є іструкція з налаштування сертифікатів let's encrypt, але неповна, хіба дупу нею підтерти. frustrated.

треба гуглити… або кинути к бісу й спробувати щось інше.

корисні (й не дуже) посилання:

альо, debian слухає!

мінімальна інсталяція debian 9 не має netstat… та й не треба, бо є lsof, який також дозволяє перевірити, хто які порти «слухає»:

sudo lsof -i -P -n | grep LISTEN

насправді lsof уміє значно більше, ніж лише це, треба читати.

p.s. а чому немає netstat? тому що його тепер (частково) заміняє новіший ss, наприклад:

ss -tu state listening

детальніше про використання ss теж треба читати.

французькі умовності

учитися мені ще й учитися…
цитата«dans une proposition introduite par si qui exprime une condition, le verbe n’est jamais au conditionnel» (banque de dépannage linguistique)
ніколи! тому що л — це логіка!

малесенька домашня мережа

накидав швиденько схему домашньої мережі; кількість пристроїв приблизно відповідає дійсности (може один-два пристрої забув).

пінгвін чи гіпервізор?

придбав собі за безцінь іграшку: hp compaq dc5800 в корпусі smal form factor.

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

буде якийсь домашній серверочок. ставити зразу linux, чи гіпервізор, а вже туди пінгвінів запустити? pentium e5200 не підтримує vt-x, але можна знайти щось новіше, e8400 — або ж спробувати паравіртуалізацію з xen… і пам'яті до 16 гб доставити.


p.s. а що то за морока з реєстрацією на my vmware: листи з активацією профіля не приходять, минуло вже більше 10 годин… мабуть, це натяк, що без vt-x нема чого той esxi завантажувать =)

поновлено (7 липня 2019). пилюку виметено. стоїть debian 9 та webmin, динамічний ip прив'язано до адреси на duckdns, є переадресація портів на рутері. можна гратися далі.

поновлено (9 липня 2019). поки що залишив сервер увімкненим цілодобово, за тиждень-два гляну, чи сильно зміниться середнє споживання електроенергії та скільки доведеться доплатити =) згодом налаштую автовимикання на ніч та wake-on-lan.
ось вам повчальна (сподіваюся) історія зі щасливим фіналом, про те, як я купував телефон на канадійському блошиному базарі kijiji. цікаво? вмощуйтеся та читайте, багато не буде.

дія перша

минулого тижня возив родину до торонто (550 км від монреаля), і коли повертався, витратив мінімум півгодини часу і трохи нервів через те, що gps мого вже старенького lenovo vibe z2 вперто відмовлявся ловити сигнал (попри ясну погоду) і виводити мене на потрібний курс.

можна зрозуміти: телефону вже шостий рік, а gps в цієї моделі від початку був проблемний, але якось ми пристосовувалися одне до одного… та тут я зрозумів, що діла не буде. тож, повернувшись додому, пішов вивчати ринок — на kijiji.

дія друга

мета: більш чи менш сучасний мудрофон на android (дай бох здоров’ячка гу́глови!), бажано в металевому корпусі, бажано з хорошою батареєю (3000 маг чи більше), мінімум 3 гб оперативки, до $100 і обов’язково від власника.

інструменти для пошуку: kjiji та порівнювалка моделей на gsmarena.