Vaba vara?
Ma teen ettepaneku lõpetada sellise sõna nagu vabavara ebasihipärase kasutamise ära. Tegemist on tavaliselt väärtõlkega inglise keelest, kus sõna free tähendab üheaegselt nii "vaba" kui "tasuta".
Miks ma sellest räägin? Ma räägin seda sellepärast, et sõna kasutus või väärkasutus mõjutab seda kuidas inimene suhtub ühte või teise tootesse. Tasuta tarkvara ehk freeware ei pruugi olla automaatselt avatud lähtekoodiga ega ka "vaba" vara. Näiteks Oracle Express (Oracle Database XE) on tasuta tarkvara, kuna selle eest ei pea sentigi lauale veeretama, ometigi pole see "vaba", sest Oracle hoiab endale kõik sellega seotud õigused. Teisest küljest võttes ei tohi unustada, et isegi kui tootega antakse kaasa lähtekood, ei pruugi see seda automaatselt "vabaks" teha. Näiteks praktiliselt kogu PHP tasuline tarkvara on avatud lähtekoodiga ja ometigi mitte "vaba".
Õigupoolest ei nimetaks ma vabaks varaks ka ühtegi GPL litsentsiga tarkvara, sest GPL seab paika päris jõhkrad reeglid kuidas seda tarkvara võib või ei või kasutada. Minu silmis on vabavara vaid public domain tarkvara, mille omaniku ja litsentsitingimusi kas ei ole võimalik tuvastada või on omanik loobunud kõikidest õigustest sellele. Taolist vara võib kasutada kuidas pähe tuleb -- laiendada, muuta, müüa (juhul kui ostja leiab), jagada, jne. Kui omanik on teada siis võib talle viidata, aga ka selle jaoks pole mingit kohustust.
Nagu olen ma jõudnud välja punkti, et enamus tarkvara, mida traditsiooniliselt kiputakse Eestis vabavaraks nimetama ei ole teps mitte vaba, vaid hoopis a) avatud lähtekoodiga (open source) ja b) tasuta (freeware).
Probleemid WordPressiga SSH võtmes
WordPress on väga tore tarkvara, kuid aeg-ajalt suudab ta ikka korralikult välja vihastada. Seekordseks põhjuseks on SSH automaatne uuendamine. Kui te veel ei tea, siis on WordPressi võimalik uuendada kolmel viisil: FTP, FTPS ja SSH. FTP on saatanast, seda ei pea ilmselt kellelegi kordama -- lõviosa kurja saadetakse Internetis korda sellega, et liigutatakse oma andmeid üle krüpteerimata kanali. FTPS ei ole mul tehniliselt võimalik ning järgi jääb seega SSH.
Ma võtsin täna kätte ja upgradesin oma serverit (tänud Tarkile). Nüüd on mul kõik vajalik kraam serveris olemas ning kui ma WordPressi uuendama lähen, siis ilmub kolmanda võimalusena ka SSH. Ometigi kui ma seda kasutan, saan ma järgneva veateate:
Unpacking the update.
Could not copy file: /srv/vhost/pronto.pushspace.com/wp-content/upgrade/wordpress-2.8.6/wordpress/wp-includes/js/codepress/engines/khtml.js
Installation Failed
Nii palju kui ma otsinud olen praeguseks on selgunud, et selle veateate põhjuseks on selline asi nagu meetod, kuidas faile kopeeritakse. On kellelgi ideid, kuidas sellest sitast saia teha? Ma saan installeerida osasi faile ja osasi uuendusi, aga mitte kõiki. Ühe põhjusena pakuti välja, et süsteem ei oska kopeerida 0 pikkusega faile.
UUENDUS:
Ise küsin, ise vastan. WordPressi SSH2 uuenduste koodis on kohutavalt labane viga. Nimelt faile kopeerides vaatab süsteem, kas infot õnnestus ühest failist teise kantida ja kui ei õnnestunud, siis annab vea. Paraku 0 pikkusega failides pole midagi kopeerida ning kui ei teostata explicit testi, siis saadaksegi vale tulemus. Põhimõtteliselt võib öelda, et PHP-s 0 == false, mis antud kontekstis on vale vastus. Et asja tööle saada, tõmmake lahti wp-admin/includes/class-wp-filesystem-ssh2.php, leidke sealt selline funktsioon:
function put_contents($file, $contents, $type = '' ) {
$file = ltrim($file, '/');
return file_put_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file, $contents);
}
ja asendage see selle koodilõiguga:
function put_contents($file, $contents, $type = '' ) {
$file = ltrim($file, '/');
if (file_put_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file, $contents) !== false)
return true;
else
return false;
}
UUENDUS 2:
Tundub, et see bugi on parandatud juba mõne aja eest, aga millegipärast pole seda peetud vajalikuks lisada vaheversioonidesse ning on märgitud muudatusena peatselt saabuva v2.9 verstaposti juurde. WordPressi ametlik parandus on pisut elegantsem kui minu oma:
function put_contents($file, $contents, $type = '' ) {
$file = ltrim($file, '/');
return false !== file_put_contents('ssh2.sftp://' . $this->sftp_link . '/' . $file, $contents);
}

