Category: IT Stuff

24.01.2023

Ако ще се залавяте със self-hosted версията на Okteto, която предлага всички удобства пред SaaS версията им ето и мояв 5 изречения:

  • Документацията по self hosted версията е outdated;
  • Подкарва се учудващо трудно;
  • Не можете да го подкарате на повече от един домейн ако имате нужда;
  • Wildcard certificates обикновено поддържат до първия поддомейн, например sub1.nedko.info. Вече okteto.dev.nedko.info (както трябва да е по тяхна конвенция) ще плюе невалиден сертификат, което е решимо, но досадно.

Основните места от които можете да намерите сбита информация освен в тяхната документация (която за self-hosted service не е супер):

07.01.2023

Ако ви се налага да вземете списък от вашите локални images на докер можете да използвате моя spell:

#!/bin/zsh
for image in $(docker image ls | grep k8s.gcr.io | awk '{print $1}' | uniq)
do
    echo $image
done

Какво прави скрипта?

  • Завъртаме цикъл в който итерираме docker image ls за да покажем всичките docker images (образи);
  • Отделяме всички, които са в k8s.gcr.io (можете да изпозлвате каквото ви е нужно);
  • awk изпозлваме за да отделим и покажем само първата колона (тази, която ни е нужна)

Изхода изглежда ей така:

./blog-post.sh
k8s.gcr.io/kube-apiserver:demo
k8s.gcr.io/kube-proxy:demo
k8s.gcr.io/kube-controller-manager:demo
k8s.gcr.io/kube-scheduler:demo
k8s.gcr.io/pause:demo
k8s.gcr.io/etcd:demo
k8s.gcr.io/coredns:demo

Това може да ви се стори мноооого специфичен пример, но е хубаво упражнение как в реалния свят да изпозлваме linux tooling-а за да си правим живота по-лесен.

06.01.2023

Ако искате да инсталирате Composer на вашия Mac можете да си спестите време като следите следните стъпки:

brew install php &&
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" &&
php composer-setup.php && 
php -r "unlink('composer-setup.php');" &&
sudo mv composer.phar /usr/local/bin/composer

Toзи oneliner ще инсталира PHP, което, слава богу, не идва по подразбиране в MacOs, после тегли composer, проверява му хеша за да сме сигурни, че се е изтеглил праивлно и без проблеми, инсталираме Composer и го правим глобален като го слагаме в /usr/local/bin/composer (ще ви иска root password).

16.11.2022

Имам страхотни колеги. С това ще започна и свърша увода си. Един от колегите с които си говорим ежедневно спомена, че в последната версия на RouterOS има native support на docker, което е fucking mindblowing. С native support можете да си вземете един Mikrotik hAP lite за 50-60 лв и на него да си сложите, пак казвам, съвсем native, без нужда от префлаш, опасност от brick-ване и подобни приключения, един piHole с който да си филтрирате рекламите в youtube на телевизора и телефоните, например. Или да си защитите homelab-а с някакъв читав firewall или пък да си сложите един wireguard и си имате VPN.

Случая с моя Mikrotik, който събира прах по рафтовете е, че е старичък. Всъщност толкова стар, че wireless-а му работи само на 2.4GHz, а LAN портовете му на 100mbps. Реших все пак да опитам да ъпдейтна една major версия нагоре (от 6.х на 7.х) да видим дали ще се поддържа и о, чудо – ъпдейта мина супер flowless. Браво на Mikrotik, че си запазват поддръжката на ОS-а дори и при стари устройства.

Ако и на вас ви е интересно как стана магията всъщност беше супер лесно. Първо си ресетнах рутера като при изваден захранващ кабел натиснах reset бутона, след това сложих кабела и изчаках да започне да мига лампичката на USR. След това логин с admin без парола и отгоре в дясно, където са Quick Setup, WebFig и Terminal избрах Terminal (може и по сериен порт или ссх, но web е удобно ако човек иска да свърши нещо много бързо и не му се занимава със сертификати и подобни.

След това изпълних следните команди:


[admin@MikroTik] > system check-installation  

  status: installation is ok

[admin@MikroTik] > system package update set channel=upgrade 

[admin@MikroTik] > system package update check-for-updates  

            channel: upgrade

  installed-version: 6.49.6

     latest-version: 7.6

             status: New version is available

[admin@MikroTik] > system package update download

            channel: upgrade

  installed-version: 6.49.6

     latest-version: 7.6

             status: Downloaded, please reboot router to upgrade it

[admin@MikroTik] > system reboot 

Reboot, yes? [y/N]: Y

След успешен ъйдейт (логото горе в ляво ще ви покаже текущата весия) можем да разрешим и контейнерите. Имайте предвид, че за да направите това ви е нужен физически достъп до рутера, защото след изпълняване на долната команда трябва да го рестартирате. Може да ви е странно, но това е добра валидация, че собственика на рутера иска да разреши контейнерите (които са огромен security hole), а не някой, който е налучкал credentials.

[admin@MikroTik] > /system/device-mode/update container=yes  update: please activate by turning power off or pressing reset or mode button in 4m49s -- [Q quit|D dump|C-z pause]

Веднъж разрешени можете да започвате да си играете с контейнерите. Повече информация и настройка (networking, storage, etc) можете да прочетете тук – https://help.mikrotik.com/docs/display/ROS/Container

19.05.2022 – git и търсене по commit

Днес ми се наложи да търся дали някой commit е влязал в tag-ната версия в git и понеже е лесен onliner споделям с вас.

Отбелязка, че много зависи какъв ви е git workflow-а. Проектът, който си избрах на рандом е този – gRPCurl.

Та имаме commit ID да речем 8ee6c9. Единия начин е да отидем в Releases на проекта и да търсим на ръка в ляво, изглежда ей така:

Но вече се досещате, че ако работите в някой огромен проект не можете да търсите на ръка 150 страници с релийзи, а за това идва в помощ git cli tool-a:

[email protected]:[~/repo/code/grpcurl] $ git log --oneline | grep "8ee6c94"

8ee6c94 can't build s390x docker images; skip for now (#265)

Ето, че виждаме съобщението, а сега вадим и таг-а:

[email protected]:[~/repo/code/grpcurl] $ git tag --contains 8ee6c94 | head -1
v1.8.5

Без head -1 вади всички тагове, които съдържат този commit (благодаря на Владо за дописването и коригирането)

[email protected]:[~/repo/code/grpcurl] $ git tag --contains 8ee6c94 | head -1
v1.8.5
v1.8.6

18.03.2022

Искам да накарам диска ми да се mount-ва автоматично при стартиране на ubuntu-то та реших да споделя ако някой има нужда от долните редове:

sudo fdisk -l

От списъка намирам, че диска, който търся е sdb, a partition-а му е sdb1:

Disk /dev/sdb: 5,47 TiB, 6001175126016 bytes, 11721045168 sectors
Disk model: ST6000DM003-2CY1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: C2683872-ECAF-4306-8170-73D16C6CE475

Device     Start         End     Sectors  Size Type
/dev/sdb1   2048 11721043967 11721041920  5,5T Linux filesystem

След това намирам UUID-то на partition-а (може и с името ѝ, в случая /dev/sdb1, но това не е добра идея по много причини):

$ sudo blkid
/dev/sdb1: UUID="fe490c8e-ac32-442a-2dfc-8e089131e048" TYPE="ext4" PARTLABEL="Storage drive" PARTUUID="6b1f3ab3-a009-43d8-8fc4-d8e456acc717"

И добавяме на нов ред в /etc/fstab

UUID=fe490c8e-ac32-442a-2dfc-8e089131e048 /mnt/bigDrive ext4    defaults        0       2

Като разбира се променяме UUID и mount point-а, който при мен води до /mnt/bigDrive.

И за да тестваме дали сме направили всичко правилно може и без рестарт, а със следната команда:

$ sudo mount -av
/                        : ignored
/boot/efi           : already mounted
none                 : ignored
/mnt/bigDrive   : successfully mounted

Туй то.

04.03.2022 – mail.bg e down от седмица

Не съм мислил, че ще хейтя И ТУК, но вече не се издържа – най-измисления mail провайдър на цялата галактика, a именно mail.bg е down от седмица. То бива, бива ама това вече на нищо не прилича. Нямам идея дали им работи mail функционалността да получавам мейли или всичко е down (nmap показва, че поне има кой да слуша на портове 25, 80, 110, 143, 443, 465, 993, което не значи, че един или повече от сървисите нямат проблеми) или през мейл клиент мога да си проверя пощата, но АЙСИКТИР с тия аматьорските изпълнения. Дори и във фейсбук не мога да им пиша на тия. Бахти.


Преди месец им писах един мейл (прикачам screenshot, защото няма как да си отворя мейла и да copy/paste текста, нали…) като ги запитах защо мейла им е лайно, но никой не ми отговори. Тогава говорих за това колко им е тъп смап филтъра, но естествено отговор не получих (дано поне някой го е прочел).

mail.bg е лайно.

NAS у нас

Тези с които разговарям напоследък сигурно им е писнало от темата, НО най-накрая се навих да си направя home NAS проекта, който мислих толкова време. В нас при разчистването се оказа, че имам 10 диска (don’t ask…) повечето от които от по 1ТБ. Първо ги бях пуснал в hardwarebg и olx, но при слабия интерес реших да ползвам каквото имам и ето, че в тестова среда имам една много прилична конфигурация с Xeon E3-1225 V2, 16 ГБ ECC рам, 7 диска (от които два са в mirror 4 са в raidz1 и един системен, който скоро време трябва да ъпгрейдна на SSD. Всичко това се търкаля на FreeNAS, който е базиран на FreeBSD, което е чудесен момент да мога да се докосна в света на BSD.
Цялото това нещо го набухах в едно Lenovo E31 с малък хак за захранването, защото оригиналното е 280W и имайки предвид, че процесора е с TPD 95W, 7 диска по средно 20W без да смятаме RAM, дънна платка и т.н. така, че един 400W Fortron свърши чудесна работа.

Цялата машина е супер студена, при няколкодневна работа процесора не се качи на повече от 36 градуса, макар, че съм длъжен да отбележа, че през повече време беше idle.

Ето и как изглеждат за сега zpool-овете ми:

nedko@freenas[~]# zpool list
NAME           SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
Mirror-1.5TB  1.36T  20.5G  1.34T        -         -     0%     1%  1.00x  ONLINE  /mnt
RaidZ-3TB     3.62T  27.4M  3.62T        -         -     0%     0%  1.00x  ONLINE  /mnt
freenas-boot   912G  36.0G   876G        -         -     0%     3%  1.00x  ONLINE  -

Те така. Скоро след като вкарам машината в production ще пиша по-подробно, зщаото темата е мега интересна, а сега с тези евтини workstations (защото Xeon + ecc memory не е излишна екстра особено зa zfs) + 3 диска по 4 ТБ например можете да си разрешите проблемите за няколко години напред.

От тук нататък опциите са всевъзможни като едно от първите неща, които смятам да направя е да заменя моя backup script, който fork-нах преди време с по-сериозен solution като rsync, duplicity, bacula или нещо друго, ще видим тестовете какво ще кажат.

06.04.2020 – Занимавки по време на чума

Значи таз чума трябва да я разкарам от заглавията си, но пък звучи добре, деба. Имам един огромен списък с неща, които искам да споделя с вас, но това май ще стане в отделен пост.

Понеже живеем в tricky времена смятам, че една рубрика с хубави новини няма да навреди на мрачното настроение на блога.

Иначе последните седмици откакто е и извънредното положение работим заедно със Златина в нас. В началото беше малко на нож работата, но след ден-два всеки си намери мястото в къщата, темпото на работа и научихме кой кога има срещи та да не си пречим един-друг.
И като цяло моето ежедневие не се променя много освен, че не ходя да жуля Costa през ден и не се прибираме да се видим с моите и на Златина родителите.
В нас се скъсвам да слушам Leo, вече се опитвам всячески да филтрирам на 95% коронавирус новините, защото ми писна. А във фейсбук е някаква порнография – всеки излезе вирусолог и честно казано обмислям дали да не си деактивирам акаунта.

Иначе в офиса нещата са добре – последно време уач Ruby и ползвам безплатните уроци на CodeCademy и съм доста доволен.

И ако сте забелязали някакво подобрение на зареждането на блога то това е, че ми мина през ума съвсем скоро да проверя през Google Speed колко точки имам, защото ми се стори, че малко бавно ми зарежда началната страница. Отварям и очаквам 75-80 и БАМ – 28 точки. И като излязоха едни змии и гущери (както пя Керанов). Например при embed на youtube клип по някаква причина зареждам от YouTube JS, който се зарежда ВСЕКИ ПЪТ при всеки embed. И при все, че в предната статия имам 5-6 видеа YT зарежда JS с размер от 1 МБ (!!) на клип или 5-6 МБ в JS. Как е, а?
Та започнах да мисля стратегия – gzip по някака причина ПАК не е разрешен, обвинявам ISPConfig за това, защото имам спомен, че го оправях вече веднъж, после JS minification, но направих стъпка назад и се замислих, че проблема ми е основно в снимките и видеата. И реших проблема с един lazy load плъгин. После, защото няма как да е лесно, нали, се наложи да тествам 6-7 плъгина докато стигна до един, който просто прави lazy load без да ми чупи дизайна или да ми предлага по доста интрузивен начин да мина на про план (за lazy load, yea).

Та така де – след малко тихо псуване си харесах a3 Lazy Load, който като цяло е прост, прави това, което искам и е сравнително конфигурируем.

Не казвам, че това е най-гениалния начин за фиксване на производителността на един WP, но за моя върши работа.
Ето и преди/след:

Сега остана и да започна пак да пиша често в него…

27.07.2019 – 6/7

Преди няколко дни ходих да карам за да компенсирам неделята в която се скатах. Този път реших да завъртя до Аладжа Манастир, който е на 10-тина км. от Варна.

И понеже основно започвам с баири (както писах в предните си гърчописи) последната седмица тук маршрута е доста по-лек в началото (и като цяло). Синхронизирах се май с траковете, които Spotify ми пусна от моята прелесна плейлиста и честно казано се изкъртих. Каданса ми по някакво чудо беше точно толкова, колкото ми се искаше стисках силно кормилото и дишах често. Мислих си разни неща, пот ми влизаше в очите, но тогава беше един от малкото моменти в които нищо не може да ме разконцентрира. Гледха стръвнишки баира, който всеки път ме напада и всеки път резултата е различен. Дишах асфалта и приех болката. С пулс от 175 удара в минута и по баира с 13-тина км/ч катерих нагоре като много упорита (и дебела) коза. И го изкатерих. И боля, но този път по-малко.

Реших да обърна и завъртях със средна скорост от 27.7 км/ч, което не ми се случва всеки ден.

In other news:

  1. Юруков отново със страхотен коментар по НАПЛийкс подложен с факти и страхотна карта на българите извън страната;
  2. За втори път хващат лаптопи на HP с предварително инсталирана ОС да има keylogger макар и да бил уж за debugging цели и да не е включен по default (точно за случаите в които някой го намери);
  3. Интересен поглед над новия дизайн на Twitter. Освен това май ще мигрирам в twitter, че FB само ми яде от времето и ми пълни главата с простотии;
  4. Биволъ пуснаха търсачка на #НАПлийкс в която можете да потърсите дали вие сте вътре. Стъпките са описани и няма страшно – генерирането на MD5, който е еднопосочен алгоритъм ще ви даде известна сигурност, че Биволъ няма да ви откраднат ЕГН-тата (които вече си ги има в публичното пространство :D );
  5. В Русия искат да вържат вашия телефонен номер с мейла ви. Това като онази новина от преди няколко дни в която Казахстан правят MITM attack на целия HTTPS трафик в страната. Да живее демокрацията;
  6. Историческия парк около Варна може да се окаже пирамида.

Song of the day

Признавам си, че Joe Bonamassa го харесвах само в комплект с Beth Hart, нооо тряба да чуете това.

Виц на деня

Мъж се събудил и погледнал часовника си, било 7:07ч. Облякъл се, отишъл в кухнята, погледнал календара 7 юли (7ми ден на 7мия месец). Излязъл навън, а на спирката се задавал трамвай 7, хванал го и отишъл на кафе, а там сметката била 7.77лв
“Баси днеска само на седмици ми върви, съдбата се опитва да ми каже нещо”. Отскочил до букмейкъра и се пуснал на конни състезания, там кон номер 7 бил кръстен Съдба. Човекът не можал да повярва и заложил последните 100 лв, които имал на него и естествено конят завършил седми.