Liigu peamise sisu juurde

Uus koduleht 2026

· Ühe min lugemine
Infokiir OÜ
  1. aasta lõpus sai siinsamas kirjutatud, et vana koduleht oli liiga kaua muutumatuna püsinud. Ajalugu kordub — vahepeal möödus kaheksa aastat ja nüüd oli jälle aeg uuenduseks.

Kummalise SSH vea lahendamine

· Ühe min lugemine
Infokiir OÜ

See artikkel on pisike jätk varasemale artiklile:

https://www.asjade.net/varia-menu/81-maengud-ssh-ga

Pärast Ubuntu 20.04 focal üleminekut uuemale Ubuntu 22.04 jammy versioonile ei toiminud enam võtmeid vahetades ssh ühendus ühe Synology NAS seadmega. Tuli parooli küsimise rida ning sisestades õige salasõna oli võimalik ikka sisse saada.

Sedasorti probleemide lahendamisel aitab -vvv võtme lisamine ssh käsureale. Lisaks sellele kasuta ikka Google otsingut, kuid ära pelga ka uut populaarset ChatGPT https://en.wikipedia.org/wiki/ChatGPT teenust https://chat.openai.com. See võib lahenduseni viia kiiremini kui arvata oskad.

Lahenduseks oli seekord selline:

touch ~/.ssh/config
chmod 600 ~/.ssh/config
nano ~/.ssh/config

cat ~/.ssh/config
Host tegelik.ip.aadress
PubkeyAcceptedKeyTypes +ssh-rsa
KexAlgorithms +diffie-hellman-group14-sha1
HostKeyAlgorithms +ssh-rsa

Rohkem selle kohta lugemist:

https://askubuntu.com/questions/1409105/ubuntu-22-04-ssh-the-rsa-key-isnt-working-since-upgrading-from-20-04

MacBook Pro Ubuntu Desktop 20.04 LTS Linux ja USB klaviatuur

· Ühe min lugemine
Infokiir OÜ

Kuidas installida Ubuntu Desktop 20.04 LTS Linux MacBook Pro sülearvutile USB mälupulgale?

macbook-ubuntu

Selle kohta sai tehtud 2 videot:

https://www.youtube.com/watch?v=mo440sAe2dQ

https://www.youtube.com/watch?v=F7ZHVNVBuN8

Selleks, et GRUB käsureal oleks kergem tööd teha, sai tehtud ka USB klaviatuur, mis saadab klahvivajutused järjestikpordi kaudu:

https://www.youtube.com/watch?v=ZbuvjBGOJGg

Vastavad github leheküljed:

https://github.com/asjadenet/macbook-ubuntu-usb

https://github.com/asjadenet/serial2keyb

https://github.com/asjadenet/serial2keyb-byline

Pordi suunamine turvalisemaks OpenWrt ruuteriga

· 4 min lugemine
Infokiir OÜ

Ei ole just ebatavaline olukord, kus meil on vaja sisevõrgust mingi teenus kättesaadavaks teha avalikule internetile. Seda saab suhteliselt lihtsasti teha pordi suunamisega. Näiteks Cisco EPC3940 modemil näeb see välja selliselt:

Cisco EPC3940

Kui teeme lahti pordi 22 ja meil on see edasi suunatud ssh serveri teenusele, siis võime näha logidest umbes sellist vaatepilti:

ssh auth fail log

Kui nüüd ip aadresside haaval uurida, siis võime leida, et üritajaid on olnud Hiinast, Vietnamist, Lõuna-Koreast ja mujaltki.

Loomulikult tuleb tahtmine nende üritajate elu raskemaks teha ja need IP aadressid ära keelata. Tavalise ruuteri tarkvaras ei pruugi aga sellist võimalust olla. Õnneks on populaarses vabavaralises ruuteri tarkvaras OpenWrt see võimalik. Sellepärast tasuks enne uue ruuteri ostmist uurida, kui hästi see OpenWrt OS-i toetab. Näiteks üks populaarne ruuter on TP-LINK Wireless Access Point Archer C7 AC1750 Dual Band Gigabit wireless Router

Selle asemel, et hoida ajakohasena pikka nimekirja, kust me ühendusi ei soovi, võime teha ka nn "valge nimekirja" IP-aadressidest, kust me soovime ligipääsu lubada.

Mängime nüüd läbi olukorra, kus tahame lubada ligipääsu vaid Eesti IP aadressidelt ja mitte kusagilt mujalt.

Esiteks on meil vaja nimekirja Eesti IP aadressruumist. Abiks on selline pisike tööriist nagu get-ripe-ips. See on bash skript, mis laadib aadressid json vormingus alla ja salvestab tekstifailina. On ka teisi võimalusi. Vaatame siin vaid ühte.

$ git clone https://github.com/mivk/ip-country.git
$ chmod +x get-ripe-ips
$ ./get-ripe-ips -c ee -o . -s 1800
./get-ripe-ips: line 74: hash: jq: ei leitud
Cannot find the jq Json processor. Install it with 'apt install jq' or similar
$ sudo apt install jq
$ ./get-ripe-ips -c ee -o . -s 1800
$ head ipv4_ee
2.57.220.0/22
2.59.164.0/22
5.34.240.0/21
5.44.184.0/21
5.45.112.0/21
5.45.120.0/21
5.101.112.0/20
5.101.176.0/20
5.153.232.0/21
5.157.0.0/18

Selliselt on meil IP aadressid failis ipv4_ee olemas.

Vaikimisi ei ole ruuteris installeeritud ipset utiliiti, kuid selle võib installeerida veebiliidese abil:

openwrt-ipset

Samuti võime testimiseks installida netcat: openwrt-netcat

Kopeerin selle faili ruuteris asukohta /usr/opt/geoip-ee/ipv4_ee.

Muudan ruuteris faili /etc/firewall.user:

root@OpenWrt:~# cat /etc/firewall.user
# This file is interpreted as shell script.
# Put your custom iptables rules here, they will
# be executed with each firewall (re-)start.

# Internal uci firewall chains are flushed and recreated on reload, so
# put custom rules into the root chains e.g. INPUT or FORWARD or into the
# special user chains, e.g. input_wan_rule or postrouting_lan_rule
ipset create ipv4_ee hash:net
while read network ; do
ipset add ipv4_ee $network;
done < /usr/opt/geoip-ee/ipv4_ee

Teeme ruuterile restardi. Seejärel logime sisse ja vaatame, kas igal käivitamisel tehakse ipset nimega ipv4_ee. Seda saame vaadata käsklusega:

ipset list ipv4_ee

Kui ilmub nimekiri IP aadressidega, siis on sellega korras.

Proovime kõigepealt pordi suunamist ilma ip aadresside piiranguteta.

openwrt-port-fw1 openwrt-port-fw1a

Käivitan ruuteris:

netcat -l -p 8080

Proovin Eestis paiknevast masinast:

connect-test-eesti1

listen-test-eesti1

Sama Inglismaal paiknevast masinast:

connect-test-uk1

listen-test-uk1

Nagu näha, pordi suunamine töötab ja see on ligipääsetav igalt poolt maailmas.

Paneme nüüd piirangu peale, lisades tulemüüris Extra arguments reale: -m set --match-set ipv4_ee src.

openwrt-extra-arguments

Proovime nüüd uuesti. Kui meil on kõik õigesti, siis peaksime endiselt Eestist ligi pääsema, kuid Inglismaalt enam mitte:

connect-test-eesti1

listen-test-eesti2

Sama Inglismaal paiknevast masinast:

connect-test-uk2

Mida öelda kokkuvõtteks? Kui meil on kasutada OpenWrt ruuter, siis tasub ligipääs IP aadresside järgi ära seadistada. Nagu nägime, ei olegi seda nii raske teha.

Linke:

https://openwrt.org/toh/tp-link/archer-c5-c7-wdr7500

https://unix.stackexchange.com/questions/502907/how-to-block-countries-iptables-or-firewalld-by-geolite2-mmdb/527504#527504

https://unix.stackexchange.com/questions/516504/iptables-to-allow-traffic-from-one-country-only

Mitte keegi ei taha rohkem tarkvara…

· Ühe min lugemine
Infokiir OÜ

tarkvara

Photo by Fotis Fotopoulos on Unsplash

Mitte keegi ei taha rohkem tarkvara… See on täitsa tõsi. Tarkvara ei ole vaja lihtsalt tarkvara pärast. Kellele meeldiks iga päev paigaldada oma arvutisse aina uusi programme või proovida internetis üha uusi ja uusi teenuseid?

Kui meil ei ole vaja uut tarkvara, siis mida meil siiski vaja on? Eelkõige soovime lahendusi tüütutele ja keerulistele probleemidele, soovime vältida vigu, mis tulenevad sellest, et meil ei ole asjad hästi organiseeritud, puudub ülevaade, eksime sisestamisel, unustame jne.

Hea tarkvara aitab lahendada probleeme ja kes seda ei tahaks? Hea tarkvara justkui peidab probleemid ja keerukuse meie eest ja näitab meile midagi lihtsat, ilusat ja mugavat.

Seega selle asemel, et öelda "meil on vaja rohkem tarkvara" võiks öelda "meil on vaja head lahendust".

Azure docker ja eestikeelne kõnetuvastus

· 4 min lugemine
Infokiir OÜ

Eesti keele kõnetuvastus on üsna keeruline tarkvara. Isegi selle installeerimine enda arvutisse võib olla väljakutse. Mis siis rääkida veel selle kirjutamisest programmeerijana.

Veebibrauseris vastav tööriist on internetis saadaval siin: http://bark.phon.ioc.ee/webtrans/

Kui siiski soovime seda tarkvara ise jooksutada, siis üks lihtne võimalus on kasutada valmis docker konteinerit.

Juhendi leiame siit:

https://github.com/alumae/kaldi-offline-transcriber/tree/master/misc/docker

Kui teha selle juhendi järgi, siis suure tõenäosusega saame selle ka kohe tööle. Eelnevalt tuleb jälgida, et docker konteineri käsutuses oleks vähemalt 6GB RAM. Mul ebaõnnestus 4GB RAM-ga, kuid 6GB oli piisav, et üks näide tööle saada.

Kui me ei sooviks seda tarkvara hoida enda arvutis vaid hoopis Azure pilves, kuidas see siis tööle saada? Järgnevalt on dokumenteeritud väike juhend, kuidas mul see õnnestus kasutades PowerShell käsurida.

Kõigepealt tee resource group:

az group create --name tuvastusResourceGroup --location uksouth

vastus:

{
"id": "/subscriptions/55622624-1ccb-4e6c-97dc-51d463935a2e/resourceGroups/tuvastusResourceGroup",
"location": "uksouth",
"managedBy": null,
"name": "tuvastusResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}

Seejärel tee Container Registry:

az acr create --resource-group tuvastusResourceGroup --name tuvastusContainerRegistry --sku Basic

vastus:

{
"adminUserEnabled": false,
"creationDate": "2019-11-01T08:36:50.213637+00:00",
"id": "/subscriptions/55622624-1ccb-4e6c-97dc-51d463935a2e/resourceGroups/tuvastusResourceGroup/providers/Microsoft.ContainerRegistry/registries/tuvastusContainerRegistry",
"location": "uksouth",
"loginServer": "tuvastuscontainerregistry.azurecr.io",
"name": "tuvastusContainerRegistry",
"networkRuleSet": null,
"policies": {
"quarantinePolicy": {
"status": "disabled"
},
"retentionPolicy": {
"days": 7,
"lastUpdatedTime": "2019-11-01T08:36:52.156079+00:00",
"status": "disabled"
},
"trustPolicy": {
"status": "disabled",
"type": "Notary"
}
},
"provisioningState": "Succeeded",
"resourceGroup": "tuvastusResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}

Logi sisse:

az acr login --name tuvastusContainerRegistry

Vastus:

Login Succeeded

Lubame admin kasutaja:

az acr update -n tuvastusContainerRegistry --admin-enabled true

vastus:

{
"adminUserEnabled": true,
"creationDate": "2019-11-01T08:36:50.213637+00:00",
"id": "/subscriptions/55622624-1ccb-4e6c-97dc-51d463935a2e/resourceGroups/tuvastusResourceGroup/providers/Microsoft.ContainerRegistry/registries/tuvastusContainerRegistry",
"location": "uksouth",
"loginServer": "tuvastuscontainerregistry.azurecr.io",
"name": "tuvastusContainerRegistry",
"networkRuleSet": null,
"policies": {
"quarantinePolicy": {
"status": "disabled"
},
"retentionPolicy": {
"days": 7,
"lastUpdatedTime": "2019-11-01T08:36:52.156079+00:00",
"status": "disabled"
},
"trustPolicy": {
"status": "disabled",
"type": "Notary"
}
},
"provisioningState": "Succeeded",
"resourceGroup": "tuvastusResourceGroup",
"sku": {
"name": "Basic",
"tier": "Basic"
},
"status": null,
"storageAccount": null,
"tags": {},
"type": "Microsoft.ContainerRegistry/registries"
}

Tekitatud kasutajanime ja parooli saab vaadata nii:

az acr credential show --name tuvastusContainerRegistry

Vastus:

{
"passwords": [
{
"name": "password",
"value": "********************************"
},
{
"name": "password2",
"value": "********************************"
}
],
"username": "tuvastusContainerRegistry"
}

Veendu, et käsurida lokaalses dockeris töötab. Näiteks:

docker exec 79bafd51385a1933d7ea584a07870a0bc8ab9c791ab24a938e17e3313ce750cb bash -c 'mkdir -p /opt/speechfiles/ ; cd /opt/speechfiles/ ; wget https://www.infokiir.ee/mp3test/proov.mp3 ; /opt/kaldi-offline-transcriber/speech2text.sh --trs /opt/speechfiles/proov.trs /opt/speechfiles/proov.mp3 ; cat /opt/speechfiles/proov.trs'

tag käsklusega märgistame konteineri:

docker tag alumae/kaldi-offline-transcriber-et tuvastuscontainerregistry.azurecr.io/kaldi-offline-transcriber-et:v1

Saadame selle azure pilve (see võtab üsnagi aega, sõltuvalt interneti kiirusest):

docker push tuvastuscontainerregistry.azurecr.io/kaldi-offline-transcriber-et:v1

Nüüd teen docker image vastava käsureaga:

az container create --restart-policy Never --registry-username tuvastusContainerRegistry --registry-password ******************************** --cpu 2 --memory 6 --resource-group tuvastusResourceGroup --name tuvastus6m --image tuvastuscontainerregistry.azurecr.io/kaldi-offline-transcriber-et:v1 --command-line "bash -c 'mkdir -p /opt/speechfiles/ ; cd /opt/speechfiles/ ; wget https://www.infokiir.ee/mp3test/proov.mp3 ; /opt/kaldi-offline-transcriber/speech2text.sh --trs /opt/speechfiles/proov.trs /opt/speechfiles/proov.mp3 ; cat /opt/speechfiles/proov.trs'"

Muide alla 6GB mälu ei tasu panna. Proovisin 4GB ja sellest jäi väheks.

Tulemust vaatan käsklusega:

az container logs --resource-group tuvastusResourceGroup --name tuvastus6m

See näeb välja umbes selline:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Trans SYSTEM "trans-14.dtd">
<Trans scribe="est-speech2txt" audio_filename="proov" version="1" version_date="191101">
<Speakers>
<Speaker id="spk1" name="K01" check="no" dialect="native" accent="" scope="local"/>
</Speakers>
<Episode>
<Section type="report" startTime="0.000" endTime="9.330">
<Turn speaker="spk1" startTime="0.690" endTime="9.150">
<Sync time="0.690"/>
Ma teen siis ise kõigepealt ühe väikse proovi. Vaatame, kas ta oskab helifaili teha tekstiks.
</Turn>
</Section>
<Section type="filler" startTime="9.330" endTime="10.320">
</Section>
</Episode>
</Trans>

Kui soovin uuesti käivitada kestuse mõõtmisega, siis kasutan käsklust:

Measure-Command { az container start --resource-group tuvastusResourceGroup --name tuvastus6m }

Tulemus:

Days : 0
Hours : 0
Minutes : 8
Seconds : 43
Milliseconds : 367
Ticks : 5233673801
TotalDays : 0,00605749282523148
TotalHours : 0,145379827805556
TotalMinutes : 8,72278966833333
TotalSeconds : 523,3673801
TotalMilliseconds : 523367,3801

See tarkvara jookseb üllatavalt kaua, samas tuvastuse kvaliteet on üllatavalt hea.

Nädalapäev E, T, K, N, R, L, P Excelisse

· Ühe min lugemine
Infokiir OÜ

Exceliga tööd tehes on mõnikord vaja kuupäeva puhul teada nädalapäeva. Tore oleks, kui selleks oleks valmis funktsioon. Tegelikult selline funktsioon ongi olemas. Esimese hooga ehk selle peale lihtsalt ei tule. Tavaliselt aitab interneti otsingumootor, kui teada sobivaid märksõnu.

Funktsioon ise on selline:

=TEXT(WEEKDAY("2019-03-15");"ddd")

Muidugi saaks sarnase funktsiooni ka ise programmeerida, kuid sellisel juhul peaks olema failis makrod lubatud. Ülaltoodud funktsioon töötab ka LibreOffice-ga.

excel-nadalapaev

Monitori remont

· 2 min lugemine
Infokiir OÜ

Mida teha siis, kui monitor "ei võta enam pilti ette", on "pime" jne? Enamasti rändab see jäätmejaama ja on aeg osta uus. Kuid kas tegelikult on vaja alati uut osta? Rikkis võib olla monitoril vaid paar detaili ning nende vahetamine võtab kogemustega remondimehel ehk 15 minutit.

Siin on üks video monitori remondist päris hea selgitusega:

https://www.youtube.com/watch?v=72sJ5Infuu0

Nagu sellest videost näha võis, on kõige tavalisem viga elektrolüütkondensaatorite riknemine.

Siin on siis ka üks näide edukast monitori remondist. Vigaseks osutus monitor Samsung 2343BW.

Pärast monitori lahtivõtmist avanes selline vaatepilt:

toiteplokis vigased kondensaatorid

Nagu näha, on pildi keskel kaks kõrvutist elektrolüütkondensaatorit "kergelt punnis". Kui on käepärast ESR meter, siis sellega mõõtes saab kergesti kondensaatorite korrasolekut hinnata. Spetsiaalne ESR meter ei ole just kõige odavam mõõteriist, kuid abiks on ka odav LCR-T4, mille võib kätte saada konstruktori komplektina ligi 10€ eest.

Kui kondensaatorid olid lahti joodetud, siis nägid need välja sellised:

vigased kondensaatorid vaade

Tegemist on Samsungi 1000uF x 16V LOW ESR kondensaatoritega. Asenduseks läksid sisse Oomipoest saadaolevad Panasonic kondensaatorid EEU-FM1C102:

Ise monitori remontimine ei ole muidugi päris kõigile jõukohane. Miks mitte enne äraviskamist siiski proovida seda remontida? Vajadusel võta ühendust ja too rikkis monitor kohale Raplas Väljataguse 12.