tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Ubuntu komentorivinä ja Windows 10

Varsinaisen linuxin kaikkine lisäkilkkeineen ja työpöytineen on mahdollista asentaa Windowsiin niin, että se eräällä tavalla toimii Windowsin sisällä hiekkalaatikossaan. Yleensä moinen on resurssien ja tehojen tuhlaamista, joten järkevämpää olisi asentaa linux samalle koneelle Windowsin rinnalle ja ottaa käyttöön dual boot. Tuo on vaihtoehto silloin kun todella tarvitsee linuxia esimerkiksi koodausta varten tai – kuten yleensä – leikkimiseen ja rinnalla tarvitsee Windowsia muuhun. Jos aikoo käyttää linuxissa sen koko potentiaalilla, tai korvaamaan Windows, niin se kannattaa asentaa omalle koneelleen. Useimmat eivät kuitenkaan aidosti tarvitse linuxia, vaan tarve voidaan jakaa kolmeen osaan:

  • uskotaan, että linux korjaa hitaan koneen
  • toivotaan, että linux korjaa epämääräisesti koettuja Windowsin hankaluuksia, vaikeuksia ja puutteita
  • tarvitaan FTP:tä näppärämpi yhteys virtuaaliserverille

Linux ei paikkaa Windowsia

Hidasta konetta ei korjaa mikään, koska hitaus tulee raudan vajeista suhteessa käytettäviin ohjelmiin. Jos linuxille rakentaa saman ympäristön kuin minkä Windows on tarjonnut, niin jokainen linux on raskaampi. Lisäksi linuxit ovat herkempiä teknisille ongelmille, kuten jos Windowsin ongelmat johtuvat ylikuumenemisesta tai vajaasti toimivasta muistikammasta. Silloin ongelmat vain pahenevat vaihdossa Windowsista linuxiin.

Korjataan samantien yksi yleinen linuxeihin yhdistetty legenda: niitä ei tarvitse buutata ja Windows joudutaan käynnistämään koko ajan. Windowsin kohdalla tuo päti joskus version 95 kohdalla ja siinäkin syynä oli jatkuvat järjestelmäpäivitykset. Minä joudun buuttaamaan serverini paljon useammin kuin win-läppärini. Kyse on koko ajan käyttöjärjestelmän päivityksistä. Jos ei koskaan päivitä linuxinsa ydintä, niin ei järjestelmää tarvitsekaan käynnistää. Ei tarvitse käynnistää Windowsiakaan, jos jättää päivitykset ajamatta. Kummassakin kyse on huonosta ideasta. Legenda on lähtenyt hieman tarkoituksenhakuisesta asioiden sekoittamisesta. Kun komennan Ubuntussa apt update & apt dist-upgrade, niin reboottia ei yleensä tarvita. Se johtuu siitä, että de facto kyseessä on sovellusten päivittäminen, eikä siinä tarvitse Windowsiakaan käynnistää. Ero Windowsin tappioksi tulee siitä, että osa sovelluksista todellakin vaatii Windowsin uudelleenkäynnistyksen tai vähintään uloskirjautumisen. Tosin en ole koskaan oivaltanut, että miksi se on niin suuri ongelma muissa kuin isoissa tuotantokoneissa – ja niissä on omat ratkaisunsa. Plus, ei niillä koneilla ajeta desktop-ratkaisuja.

Ihmisten mielestä Windows on hankala. Aidosti kyse on siitä, että ei oikein osata käyttää ohjelmia tai Windows pakkokäynnistyessään – joka on tehty nimenomaan osaamattomien ja tekemättömien käyttäjien takia – on jyrännyt jonkun keskeneräisen ja tietysti tallentamattoman työn. Melkoisen yleinen halu vaihtaa linuxiin on osaamattomuus käyttää Wordia, Facebook ei toimi kunnolla tai jokin bluetooth-lisätarvike ei asennu kunnolla. Tai printteri kiukuttelee. Yksi yleinen syy on jonkun ohjelman kaatuminen.

Ei linux moisissa mitään korjaa. Word on edelleen aivan yhtä monimutkainen, vaikka sen vaihtaisi open office-vaihtoehtoon. Tallennukset on aina tehtävä, ei siinä linux mitään auta. Facebookin ongelmat ovat Facebookin päässä, ei selaimessa tai Windows-koneessa – siksi toiseksi, android-appsissa eniten ongelmia on ollut. Lisälaitteet vaativat valmistajan tukea, ja ne ovat aina olleet linuxien aito akilleen kantapää; ei siitä niin kauaa ole, kun nimenomaan printterin toiminta oli todella vaikeaa, jos se oli joku muu kuin mv-laser. Mutta jos valmistaja ei tee kunnollista ja toimivaa ohjelmaa Windowsille, niin miksi ajateltaisiin, että työpöytäkäytössä oleva totaalisen marginaalinen linux saisi toimivamman? Sama juttu ohjelmien kaatumisessa. Joko kyse on bugisesta softasta tai rautaongelmista, eikä niitä linux korjaa.

Linux on vahvasti hype

Kyse on koko ajan siitä, että linux ei helpota desktop-käytössä, vaan vaikeuttaa ja aidosti karsii vaihtoehtoja. Linuxin käyttö ja sen logiikan ymmärtäminen vaatii syvempää osaamista, jo asennuksesta alkaen. Ei ole sattumaa, että Chrome Bookit tehtiin niin vähän käyttäjän säätöjä tarvitsevaksi kuin mahdollista.

Yleensä tässä vaiheessa linux-harrastajat ovat jo kehittäneet kohtuullisen raivon. Se johtuu kolmesta syystä:

  • kykenemättömyydessä ymmärtää mitä tavallinen loppukäyttäjä osaa ja tekee; regex on tehokas työkalu, mutta ei sellaiselle, joka käyttää Googlea selaimen osoitepalkkina
  • kykenemättömyydessä ymmärtää työkalun aito funktio; älä käske ottamaan puusepänverstasta käyttöön, kun tarve on saada Ikean verhot ikkunaan
  • fanitoiminnassa; kukaan ei ole niin fanaattinen kuin linux- tai appleharrastaja ja olenkin aina miettinyt, että harrastavatko he aikuisempia aktiviteetteja laitteidensa kanssa

Kaikki voidaan kiteyttää perusväitteeseen avoimien ja suljettujen järjestelmien välillä: avoin on parempi, koska käyttäjä voi muokata kaikkea. Taatusti noin, mutta mitä iloa siitä on ihmisille, jotka eivät osaa asettaa puhelimen kotinäyttöön haluamiaan appseja?

Linux on järeä työkalu

Linux on vahvimmillaan siinä käytössä, johon se on luotu:

  • ohjelmointiympäristönä,
  • kehitykseen ja
  • nettipalveluihin
  • yksityiskohtaisiin yhden tarpeen koodeihin

Jos vain käytät loppukäyttäjän roolissa vaikka WordPressiä, niin silti huomattavan suurella todennäköisyydellä työskentelet linuxissa. Jo pelkästään wp-config.php tiedoston muokkaaminen on toimimista linuxissa. Puhumattakaan, jos joudut kasvattamaan cPanelissa PHP:n sallimaa suurinta mahdollista siirrettävää tiedostokokoa – linuxissa ollaan. Onko FTP tuttu? Vastapuolen hakemistorakenne, tiedosto-oikeudet ja -omistajat ovat kaikki linuxin asioita.

Jos otat käyttöön virtuaalipalvelimen, niin et enää jää eräänlaiseen eri ohjelmia hyödyntävän loppukäyttäjän rooliin. Ylläpito koskee eräällä tavalla kokonaista tietokonetta ja siinä tiedostojärjestelmänä on linux. Websivut ja niiden vaatimat asiat ovat ”vain” linuxin sovelluksia. Ainoa ero Windowsiin tulee siinä, että työskentelet komentorivillä, et graafisella työpöydällä. No, on toinenkin ero. Vaikka pystyt asentamaan Windowsiin webpalveluihin vaadittavat asiat ja ohjelmat, niin silti se on leikkimistä ja ainoa todellinen vaihtoehto on linux (unohda IIS tai muut ratkaisut, ne ovat isojen poikien puuhaa; niissäkin linux on yleisin).

Sinulla on siis useimmiten toteutus, jossa

  • tarvitsemasi toimisto-ohjelmat ja muut ovat omalla koneellasi Windowsilla
  • virtuaaliserverin linuxin hallintaan käytät Windowsissa olevaa PuTTY
  • virtuaaliserveri on linuxilla pyörivä tietokone
  • webpalvelusi ja sivustosi ovat linuxilla

Useimmiten tuo riittää. Mutta joskus pitäisi päästä omasta Windowskoneesta virtuaalikoneelle, tai päinvastoin, hieman tehokkaammin kuin mitä FTP sallii. Itseasiassa FTP:n korvaaja on erittäinkin perusteltu syy, sillä FTP on hidas. Silloin rsync olisi tehokkaampi vaihtoehto. PuTTY on kuin FTP ilman oman koneen tiedostojärjestelmää. Pääset kohdekoneelle, mutta et omallesi. Silloin vaihtoehdoksi tulee virittää Windowsin omaa komentokehotetta, joka on työläs ja käytöltään omituinen, tai asentaa Ubuntu, mutta ilman työpöytiä sun muita graafisia kilkkeitä.

Hyvät uutiset ovat, että se on aivan tolkuttoman helppoa. Mutta joudut käynnistämään Windowsin uudelleen…

WSL

Otetaan ennen Ubuntun asennusta käyttöön pakollinen WSL eli Windows Subsystem for Linux. Se on eräänlainen virtuaalikone, jota tarvitaan Ubuntun terminaalin pyörittämisen, käytännössä siten myös Ubuntun kernel.

Etsi PowerShell. Se löytyy käynnistysvalikosta aika loogisella nimellä Windows PowerShell. Käynnistä se järjestelmänvalvojan oikeuksilla eli klikkaa hiiren oikealla korvalla. Valitse Run as Administrator.

 

Ensimmäiseksi sinun täytyy tarkastaa Windowsin versio, koska se määrää minkä version WSL:stä asennetaan, WSL1 vai WSL2. Paina windows-logo + R ja komenna avautuneeseen ikkunaan winver.

Tässä on versio 1909:

Jos sinulla on versio 1909 (tai vanhempi), niin anna PowerShellissä tämä:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Jos (tai kun) sinulla versio on 2004 (tai uudempi), niin komenna tämä:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Nyt on aika käynnistää tietokone uudestaan, jotta WSL tulee käyttöön.

Ubuntu

  • Avaa Windowsin kauppa.
  • Kirjoita hakukenttään Ubuntu ja valitse Ubuntu – ellet ehdottomasti tiedä tarvitsevasi vanhempaa jakelua, sillä kauppa asentaa viimeisimmän LTS-version. Jos haluat jonkun muun jakelun, niin ainakin Suse ja Debian löytyy, kokeile distron nimellä. Minä asennan Ubuntun, kun en muutakaan osaa.

Ubuntulle tarjotut versiot ovat (tätä kirjoitettaessa):

  • Ubuntu
  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS

Ensimmäinen vaihtoehto asentaa aina sillä hetkellä uusimman LTS:n eli pidemmän tukiajan version. Vuoden 2022 huhtikuuhun asti, noin, uusin on 20.04. Voit myös asentaa pykälää vanhemman jos siltä tuntuu.

Noissa on ainoa ero kuvaustekstien mukaan on siinä, että numerollisia LTS-versioita ei voi päivittää uudempaan ja ”puhtaan” Ubuntun voi. Omassa kokeilussa päivittäminen ei kuitenkaan onnistunut, vaan se keskeytyi virheisiin. Joten sanoisin, että jos ei ole ehdotonta tarvetta asentaa 18.04 versiota, niin silloin on aivan sama kumman kahdesta muusta asentaa.

Valitse haluamasi ja klikkaa Hanki. Lataus alkaa ja jossain vaiheessa pääset terminaalin näköiseen ikkunaan.

Appsin asentuminen

Terminaalissa asennetaan varsinaisesti Ubuntu käyttöön ja kestää hieman aikaa.

Ensimmäisellä kerralla sinua pyydetään luomaan käyttäjätunnus ja salasana – kummallakaan ei ole mitään tekemistä Windowsin kanssa, ja luomasi tunnus on suoraan sudo-ryhmässä. Sitten oletkin omassa kotihakemistossasi ja voit alkaa käyttämään paikallista Ubuntua terminaalipohjalta.

Kuten aina, niin aivan ensimmäiseksi hoidetaan päivitykset alta pois:

sudo apt update
sudo apt dist-upgrade

Ubuntun appi ei sinällään huutele rebootia, koska siihen ei koskaan päivitetä mm. kerneliä vastaavasti kuin oikeaan ja aitoon, vaan se tehdään WSL:n päivityksen kautta normaalin Windowsin päivityskäytännön kautta. Lisäksi ikkunan sulkeminen ja käynnistäminen käyttäytyy ikään kuin reboot.

Tästä eteenpäin toimit kuin sinulla olisi melkein aito Ubuntu. Jos tarvitset git-palvelun, niin asennat sen normaalisti apt install komennolla. Kuvien massamuokkaus Imagemagickin avulla? Onnistuu, mutta asenna sen ensin Ubuntun malliin. Tarviiko joku PHP:tä? Kokeile sudo apt install php7.4-cli paitsi jos haluat todellakin kaiken, Apachen haluamia kilkkeitä myöten – silloin käsketään sudo apt install php7.4.

Mennään astetta pidemmälle. Haluatko harjoitella Nginxin kanssa webserverin ylläpitoa? Asenna se ja kaikki tarvittava. Se, että toimivatko palvelimet ja miten, niin en tiedä. En ole koskaan kokeillut. Mutta ne asentuvat.

Se mikä oli (ja on) minulle hankalaa, oli omien tiedostojen löytäminen Windowsin puolelta. Mutta sekin hoitui, kun oivalsin, että kannattaa vilkaista sinne missä yleensäkin on Ubuntussa levytila: ls /mnt.

Ylipäätään suurin osa bashin/shellin käytöstä Windowsissa minulla keskittyy kolmeen

  • piipahdukseen virtuaaliserverissä komennolla ssh <tunnus>@<ip<osoite>
  • siirrot isommissa määrissä sekä hakemistojen kanssa rsync-komennolla
  • siirrot ja backup-tyyppiset hommat Amazonin S3-buckettiin; ei onnistu suoraan rsync komennolla, mutta apt install awscli antaa työkalut
  • neljäs, joka ei ole vielä sen tärkemämpää minulle, on git opettelu

Koska milloinkaan ei voi varoittaa liian monta kertaa, niin ole hieman hereillä mitä teet ja missä. rm -rf on paikallisessa Ubuntu appissa aivan yhtä vaarallinen työkalu kuin virtuaaliserverin Ubuntussakin.

Appin eroavuudet oikeaan Ubuntuun

Voi olla hieman hankala pyörittää pienemmässä sovelluksessa täysimittaisia serveripalveluita. Tai mistä minä tiedän vaikka onnistuisikin, en ole kokeillut, mutta en usko. Peruskäytössä (mitä sekin sitten tarkoittaa) en ole vielä törmännyt tilanteeseen, jossa Ubuntu app-muodossa olisi pettänyt.

Cron ei toimi

Yrittäessäni saada dynaamista DNS:ää asentumaan DigitalOceanilla olevaan domainiin cronin ajamalla skriptillä, törmäsin yhteen omituisuuteen. Cronin ajamana tiedosto ei tehnyt mitään, komentoriviltä ei ollut ongelmia.

Etsin pitkään vikaa skriptistä, yhteyksistä, oikeuksista… aivan turhaan. Syy oli niin yksinkertainen kuin että cron ei ollut käynnissä. Virtuaaliservereillä minun ei ole koskaan tarvinnut erikseen käynnistää cronia, joten en tullut moista edes ajatelleeksi.

Cronin käynnistäminenkään ei onnistunut tutulle systemctl start cron komennolla, vaan sain virheilmoituksen:

jagster@LAPTOP-BMKHF7SF:~$ systemctl status cron
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

Google antoi nopeasti vastauksen. Tätä kirjoitettaessa WSL ei osaa systemd asioita, joten kaikki on hoidettava ns. vanhalla tavalla init.d kautta:

sudo /etc/init.d/cron start

Myös hieman tutumman oloinen syntaksi kelpaa:

service cron start

SSH sisään ei toimi

En saanut millään tavalla SSH:ta onnistumaan Ubuntin appiin, mutta kylläkin siitä ulos onnistui. Olin varma, että kyseessä täytyy olla jokin Windowsin palomuurin juttu, mutta en tiennyt mikä, enkä miksi se suostuisi estämään vain yhteyden muodostamiset ulkoa sisälle.

Kun tappelin cronin kanssa ja tajusin, että se ei ole automaattisesti käynnissä, looginen jatkumo oli selvittää onko SSH sitten pystyssä.

jagster@LAPTOP-BMKHF7SF:~$ service ssh status
 * sshd is not running

Siinäpä sitä. Käynnistin SSH:n ja samalla heräsi Windowsin palomuurikin.

 

Sallin Windowsin palomuurin ja mikään ei muuttunut. Mutta onpahan palomuuri auki jollekin jossain portissa. Ongelma on siinä, että portti on auki väärässä paikassa.

Villakoiran ydin on router. Ne nettiboksi, joka on maailman ja kodin laitteiden välissä. Se päästää sisäverkossa aloitetun yhteyden läpi maailmalle, mutta ei salli yhteyden muodostamista ulkoa sisäverkkoon. Se on se palomuuri, johon halutaan portti auki.

Avataan ensin SSH:n asetukset.

sudo nano /etc/ssh/sshd_config

Muuta kohta PasswordAuthentication no muotoon yes:

PasswordAuthentication yes

Lisää tiedoston loppuun nämä:

Port 2222
AllowUsers TUNNUS
  • TUNNUS on se käyttäjätunnus, jota käytät Ubuntun appissa
  • Saattaa olla, että haluat käyttää jotain muuta porttia, mutta tuo ei mene päällekkäin jonkun muun mahdollisesti Windowssin käyttämän palvelun kanssa

Käynnistetään SSH uudestaan:

sudo service ssh --full-restart

 

Nyt tulee se haastavin kohta: routerin säätäminen. Jokaisella valmistajalla ja jopa mallilla on hieman erilainen (tai paljon) erilainen tapa säätää samaa asiaa. Mutta yritä löytää vastaavat asiat, koska ne ovat siellä. Tästä eteenpäin menen Huawei B525s-65a mukaisesti.

  • Avaa nettiboksin asetukset menemällä osoitteeseen http://192.168.100.1/ ja antamalla laitteen pohjan tyyppitarrasta löytyvät käyttäjätunnus ja salasana.
  • Kirjautumisen jälkeen näet laitteesi sisäisen IP-osoitteen. Jos se on sama laite, jossa Ubuntu pyörii, niin ota 192.168-alkuinen IP-osoite talteen.

 

  • Klikkaa Asetukset ja mene valikkokohtaan Suojaus. Jos tarvitset Ubuntun SSH:ta varten jonkun muun laitteen sisäisen IP:n, niin saat sen kohdasta Laitehallinta, muutoin klikkaa Virtuaalinen Palvelin (kuka näitä käännöksiä tekee…)
  • Klikkaa Lisää ja anna tiedot kuvan mukaisesti (tai jos tiedä mitä tarvitset ja teit jo alussa eri tavalla)

 

  • Nimi saa olla mitä vaan
  • WAN-portti on se mikä näkyy maailmalle, tyypillisesti SSH olettaa portin 22
  • LAN IP-osoite on se sisäverkon osoite, jossa SSH-serveri on, eli se missä Ubuntu pyörii; tämä otettiin alussa talteen, jos kirjauduit samalla koneelle missä Ubuntun SSH pyörii
  • Protokolla on TCP
  • Tila on syytä olla käytössä. Muuttamalla tämän saat vedettyä töpselin seinästä, jos joskus tulee sellainen olo, ilman koko palvelun poistamista
  • Muista klikata Käytä.

Kirjaudu johonkin ulkoiseen paikkaan SSH:lla, vaikka virtuaaliserverillesi. Anna shellissä komento:

ssh tunnus@kodin-julkinen-ip

  • Tunnus on sama minkä sallit SSH:n asetuksissa

Kirjautumisen pitäisi onnistua ja salasanan kautta pääset sisälle

SSH:n automaattinen käynnistäminen

Jos nyt kirjaudut Ubuntusta ulos, niin SSH ei ole seuraavalla käynnistyskerralla ylhäällä ja työn touhussa. Ubuntulle on kerrottava, että se kuuluu käynnistää. Normaalisti homma hoituisi tutulla systemctl enable ssh komennolla, mutta (tätä kirjoitettaessa) WSL eli Windows Subsystem for Linux ja Ubuntu eivät sitä hallitse, Joten mennään käsipelillä.

Avataan sudo-oikeudet määrittelevä asetustiedosto, koska kaikki järjestelmötasolla tapahtuu sudo-oikeuksilla. Toki homman voi hoitaa käyttäjän, mutta sitten pitäisi olla aina antamassa salasanaa.

sudo visudo

Etsi rivi %sudo  ALL=(ALL:ALL) ALL ja lisää sen alle nämä kaksi riviä:

%sudo ALL=NOPASSWD: /usr/sbin/sshd
%sudo ALL=NOPASSWD: /etc/init.d/ssh start

Nyt SSH käynnistyy kahdella vaihtoehtoisella komennolla ilman, että sudo pyytää salasanaa.

SSH:n automaattinen käynnistyminen Windowsin käynnistyessä

Kun Ubuntun appi on kertaalleen käynnistetty, niin SSH jää taustalle, vaikka Ubuntun ikkuna suljettaisiinkin exit komennolla.  Tuo riittää useimmille, mutta kaikki myös tiedämme, että Windowsilla on taipumus käynnistellä itseään päivitysten myötä. Olisi mukavaa, jos SSH käynnistyisi samaan tahtiin. Valitettavasti mukavuus jää hieman vajaaksi, ainakin omien kokemusten mukaan, sillä SSH ei herää ilman kirjautumista.

Toki sekin, että ei tarvitse tehdä jotain erityistä on etu. Käytetään siihen Windowsin omaa cronin korviketta, tehtävien ajoitusta.

  • Avaa haku, ala kirjoittamaan tehtävien ajoitus ja kun osuma tulee, niin klikkaa Suorita järjestelmänvalvojana.

 

 

  • Klikkaa oikealta Tehtävät alta kohtaa Luo perustehtävä…

 

 

  • Anna haluamasi nimi ja kuvaus, että muistat vielä ensi viikollakin mistä on kyse. Klikkaa Seuraava.

 

 

  • Valitse missä tilanteessa SSH käynnistetään. Itse haluaisin käyttää kohtaa Tietokoneen käynnistyessä, koska silloin SSH ei ole riippuvainen omasta kirjautumisesta. Sitä voi kuitenkin muuttaa myöhemmin tai oikeammin saattaa joutuakin muuttamaan. Minulla noin joka toisessa asennuksessa tuo toimii, joka toisessa ei. Klikkaa Seuraava.

 

 

  • Valitse seuraavassa kohdassa toiminto, joka pitäisi olla Käynnistä ohjelma. Klikkaa Seuraava.

 

  • Anna ohjelman käynnistämiseen vaadittavat tiedot ja klikkaa sen jälkeen Seuraava.

Ohjelma tai komentosarja

C:\Windows\System32\bash.exe

Lisää argumentteja (valinnainen)

-c "sudo /etc/init.d/ssh start"

 

 

  • Tarkista yhteenveto ja jos olet tyytyväinen, niin klikkaa Valmis ja ajastus on käytössä.

 

 

Jos vilkaiset aktiivisten tehtävien luetteloa, niin SSH:n käynnistys pitäisi löytyä sieltä.

 

 

Seuraavaksi kannattaa testata, että ajoitus toimii. Joten sammuta ikkunat ja buuttaa Windows uudestaan. Jos ajastus toimii, niin sinun pitäisi päästä joltain toiselta laitteelta kirjautumaan SSH:lla, kunhan olet kirjautunut sisälle Windowsiin ja latausrinkula on lakannut pyörimästä.

Jos, tai kun, kirjautuminen SSH:lla ei onnistu, niin muutetaan hiukan asetuksia.

  • Avaa uudestaan tehtävien ajoitus – nyt se saattaa löytyä jo suoraankin hakuikkunan Sovellukset välilehdestä. Klikkaa sitä oikealla hiiren korvalla ja valitse Suorita järjestelmänvalvojana

 

 

  • Klikkaa vasemmalta Tehtävien ajoituksen kirjasto, etsi keskeltä tekemäsi ajoitus, klikkaa sitä oikealla hiiren korvalla ja valitse Ominaisuudet.

 

 

  • Välilehdessä Yleiset täytyy olla valittuna Suorita vain kun käyttäjä on kirjautunut

 

 

  • Jos/kun välilehdessä Käynnistimet on Järjestelmän käynnistyessä, niin klikkaa sitä ja valitse sitten Muokkaa… Valitse avautuvasta ikkunasta Aloita tehtävä alasvetovalikosta muodoksi Kirjauduttaessa sisään. Valitse kohdasta Asetukset ensimmäisenä oleva Kuka tahansa käyttäjä.

 

 

 

  • Varmista, että välilehdessä Asetukset ovat valittuina Salli tehtävän suorittaminen tarvittaessa ja Suorita mahdollisimman nopeasti, kun ajoitus on myöhästynyt.

 

 

  • Hyväksy klikkaamalla nappulaa OK.
  • Valitse uudestaan tekemäsi ajoitus, klikkaa oikealla hiirenkorvalla ja valitse Suorita. Musta ikkuna vilahtaa, eikä virheilmoituksia saisi tulla. Sinun pitäisi nyt päästä kirjautumaan SSH:lla normaalisti, vaikka Ubuntun appia ei ole käynnistetty.
  • Testaa sammuttamalla kone, käynnistämällä se ja yrittämällä SSH:lla Windowsiin kirjautumisen jälkeen.

Se mikä on windows-tyypillisesti mystistä, on että osa koneista sallii noilla muutoksilla SSH-yhteyden, vaikka Windows-käyttäjä ei olekaan kirjautunut. Jos noin käy, niin minusta se on vain positiivista – toki olisi kiva tietää miksi noin tapahtuu ja miksi ei tapahdu aina; tokikaan asennukset eivät ole muutoinkaan olleet täysin identtisiä.

Cron käyntiin taustalle

Kuten edellä neuvottiin, niin Windowsilla on oma ajastettujen tehtävien systeemi. Mutta jos täytyy ajastaa jotain linuxin malliin, eli käytännössä WSL:ään liittyviä asioita, niin se on kaikkea muuta kuin näppärä. Cron on paljon helpompi. Ongelmantynkää on vain siinä, että myöskään cron ei ole käynnissä ilman että Ubuntu käynnistetään – ellei sitä erikseen käynnistetä aina kun Windows käynnistyy.

Cronin käynnistämisen taustalle voi tehdä samalla tavalla kuin SSH-serverin käynnistämisen. On kuitenkin muitakin tapoja. Koska asioita voi tehdä eri tavalla ja jokainen tapa opettaa lisää, niin asetetaan cron käynnistymään taustalle hieman vanhan liiton malliin. Käytetään avuksi hakemistoa, jossa olevat asiat ajetaan Windowsin käynnistymisrutiinien yhteydessä.

  • Ensin täytyy varmistaa, että cronin käynnistämiseen vaadittava sudo ei jää odottamaan salasanaa.

sudo visudo

  • Kopioi jonnekin loppupuolelle tämä:

%sudo ALL=NOPASSWD: /etc/init.d/cron start

 

  • Avataan Windowsin suorita-ikkuna – R näppäinyhdistelmällä. Aja siinä tämä:

shell:startup

 

  • Se avaa Käynnistä-kansion. Klikkaa jossain kohtaa ikkunaa hiiren oikealla korvalla ja valitse Uusi > Pikakuvake.

 

 

  • Kopio tämä komennoksi, jolle pikakuvake tehdään, ja klikkaa sitten Seuraava.

C:\Windows\System32\wsl.exe sudo /etc/init.d/cron start

 

 

  • Anna pikakuvakkeelle haluamasi nimi ja klikkaa Valmis. Ikkuna sulkeutuu ja hakemistoon ilmestyy luomasi pikakuvake.

 

Nyt Windowsin käynnistyessä käynnistetään myös cron ja sen taasen käynnistää omat ajastetut toimintansa.

WSL ja bash pyörimään taustalle

Tiettävästi ainakin WSL1 sammuttaa prosessit, kun bash-ikkuna suljetaan. Mitä tuo tarkoittaa käytännössä, niin en tiedä. Ainakin cron ja SSH ovat iloisesti käynnissä.

Aiheen googlettaminen tuo kaksi ratkaisua. Ensimmäinen on Wabash niminen ratkaisu, joka lupaa pitää demonit sun muut hengissä taustalla. Saattaa tehdä tai ole tekemättä, mutta sitä ei ole päivitetty kertaakaan neljään vuoteen. On toki mahdollista, että asian ydin ei ole muuttunut, mutta en halua kokeilla.

Toinen on yksinkertainen vbs-skripti. Se ei vaadi sen suurempia, käyttöönotto on helppoa ja poistaminen tarpeen vaatiessa vielä helpompaa.

Luo haluamaasi hakemistoon tiedosto ja nimeä miten parhaalta tuntuu, kunhan pääte on .vbs.  Itse tein sen harjoituksen vuoksi Windowsin omalla komentokehoitteella, joka aukeaa omaan kotihakemistoon C:\Users\tunnus.

  • Tehdään tiedosto:

wsl nano bash_background.vbs

  • Kopioi sinne tämä:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "bash" & Chr(34), 0
Set WshShell = Nothing
  • Avataan Windowsin suorita-ikkuna – R näppäinyhdistelmällä. Aja siinä tämä:

shell:startup

 

  • Tee pikakuvake, jonka kohde on:
C:\Users\tunnus\bash_background.vbs
  • Testaa toimivuus käynnistämällä tietokone uudestaan

Minulla mikään ei hajonnut, joka on aina positiivista. En nähnyt mitään muutoskaan, mutta toisaalta – oma käyttö on niin kevyttä, että en muuta odottanutkaan. Tuon kanssa kannattaa kuitenkin olla hieman hereillä ja jos/kun asennat WSL2:den, niin kannattanee jollain tavalla varmistaa, että tarvitaanko moista enää.

Jotain muuta?

Muitakin eroavaisuuksia on, kuten reboot kysymykset erilaisten palveluiden automaattisessa käynnistymisessä. Mutta asioita kannattaa googlettaa tapaus kerrallaan, kun jokin haluttu tai toivottu asia ei toimi. Usein vastaus löytyy nopeasti. Tai selviää mitä ei voi tehdä.

Windowsin oma komentokehoite

Windowsin oma komentokehoite toimii SSH-asiakkaana, joten jos ei ole tarve kaikelle silla mitä PuTTY muutoin tarjoaa, niin silläkin pärjää. Muutoin siitä ei ole suuremmin sen enempää iloa kuin mitä vanhojen koneiden DOS antoi – tai ainakaan mitä en ole saanut mitään apua omille töilleni, ja se saattaa olla toki osaamattomuuskysymyskin.

Sen jälkeen kun on asentanut WSL:n, niin komentokehoitteen valikoima kasvaa. Siinä pystyy ajamaan melkoisen paljon linuxin komentoja, kunhan muistaa aloittaa komennolla wsl.

En ole tuota turhan paljon kokeillut. Itseasiassa vain kerran, kun kokeilin onko Ubuntun cron käynnissä, vaikka appia ei olekaan käynnistetty.

Komento

wsl service cron status

antoi oikean vastauksen:

C:\Users\jakke>wsl service cron status
 * cron is running

Joten WSL:n buutissa käynnistämä cron toimi ja nyt tiedän, että ainakin tuo palvelu toimii taustalla ilman Ubuntun käynnistystä. Ja että WSL:n komennot toimivat normaalissakin komentokehoitteessa.