Zobrazují se příspěvky se štítkemsoftware. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemsoftware. Zobrazit všechny příspěvky

2018-11-23

Nastavení spouštění Jenkins úlohy na webhook z Gitu

Hrál jsem si s nastavováním automatického spouštění úlohy v Jenkins po commitu do GitHubu. Čistě teoreticky jde o triviální věc, kterou popisuje spousta videí, nicméně v praxi jsem narazil na několik problémů, které si tady odložím, abych to příště nemusel řešit. Třeba to pomůže i někomu dalšímu.

Na začátek hezké video, které popisuje úlohu bez nastavení tajného hesla:

Nejprve je třeba připravit Jenkins, předpokládám, že už vám joby a integrace s GitHubem funguje, jen pro informaci je třeba mít nainstalovaný plugin GitHubu.

Dále musí být dostupná adresa JENKINS_URL/github-webhook/ z veřejného internetu (nebo filtru podle GitHub IP adres), případně přenastavena na jinou v JENKINS_URL/configure sekce GitHub/Advanced (to druhé advanced) a políčko "Override Hook URL/Specify another hook URL for GitHub configuration" 

Manage webhooks zůstane nezaškrtnuto (sekce A.3) pro manuální instalaci webhooku na GitHubu.

Protože nechceme, aby každý, kdo se dostane k odkazu webhooku, spouštěl úlohu, je třeba nastavit heslo neboli "shared secret", respektive jej vytvořit v JENKINS_URL/credentials/add/secret text/system/ a pak nalinkovat "Shared secret". Nicméně je taky fajn to nejdříve vyzkoušet, že to funguje a secret přidat později (nezapomněout na to!).

Poté je třeba registrovat job, který se na webhook spustí. Zpátky na seznam úloh, rozklinout ho a možnost configure, pak checkbox GitHub project a do Project url vložit https://github.com/<user>/<repository>/ toto musí být uděláno manuálně.
Níže pak ještě zaškrtnout "GitHub hook trigger for GITScm polling", nebo to přidat do pipeline definice úlohy jako triggers{githubPush()}.

Poslední částí je nastavit URL webook na GitHubu, link: https://github.com/<user>/<repository>/settings/hooks/new, kde se vloží Payload URL: JENKINS_URL/github-webhook/ včetně lomítka na konci, content type jako application/json a secret je ten námi zvolený a uložený string.

Poté je výhodné udělat testovací ping a počkat na zelenou fajku, nicméně vlastní run jobu začně až po prvním commitu. Zejména na začátku nespěchtejte, občas to chce čas na reakci.


2018-11-19

Namespace Microsoft.SqlServer (are you missing an assembly reference?)

Chvíli jsem bojoval s chybovou hlášku u SW buildu na novém serveru, která se při sestavování stejného řešení na starším serveru neprojevovala, což bylo zjevně podezřelé. 


Její znění:
error CS0234: The type or namespace name 'Management' does not exist in the 
namespace 'Microsoft.SqlServer' (are you missing an assembly reference?) 
[...Installer.csproj]
Nepomohlo ruční doinstalování přes Nuget, ani doinstalování Microsoft SQL Server Feature Packu, ale bylo potřeba přidat celý SQL Server 2017 Developer edition, který zjevně deplnil některou závislost do systému Windows Server.

Ještě zkusím i odinstalování...
 

2018-10-24

Jenkins stops pipeline from Powershell

When you realize inside some job that you want to terminate running job in Jenkins you need to find way, hot to pass message to proper level where is Jenkins actually able to terminate the job. I am using this way with calling authorized URL which is terminating the job.

Jenkinsfile pipline is calling powershell and passing there API token from credentials (manually inserted to Jenkins => Credentials)
script
{
    if(env.GIT_PREVIOUS_SUCCESSFUL_COMMIT !=  null)
    {
        withCredentials([string(credentialsId: 'JenkinsAPIcredentials', variable: 'apistring')])
        {
            echo 'checking number of changes and stopping job if nothing new happened'
            powershell 'powershell -File $env:WORKSPACE\\stop-script.ps1 -phrase "stop-job" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL -buildIDurl $env:BUILD_URL -apistring $env:apistring'
        }
    }
}
What is happening inside powershell script? There is needed to generate authorized POST call to Jenkins server, luckily is process few lines of code. Part of code is missing definition of parameters in Powershell.
if($phrase -eq "stop-job")
{       
    $commitsnumprevious = (git rev-list --count $gitprevious)
    $commitsnumactual = (git rev-list --count $gitcurrent)
    $difference =  $commitsnumactual-$commitsnumprevious

    if($difference -le 0)
    {
        $url = $buildIDurl+'stop'
        $Bytes = [System.Text.Encoding]::UTF8.GetBytes($apistring)
        $Base64bytes = [System.Convert]::ToBase64String($Bytes)
        $Headers = @{ "Authorization" = "Basic $Base64bytes"}
        $CrumbIssuer = "$jenkinsUrl/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,`":`",//crumb)"
        $Crumb = Invoke-WebRequest -UseBasicParsing $CrumbIssuer -Headers $Headers
        $Regex = '^Jenkins-Crumb:([A-Z0-9]*)'
        $Matches = @([regex]::matches($Crumb, $Regex, 'IgnoreCase'))
        $RegCrumb = $Matches.Groups[1].Value
        $Headers.Add("Jenkins-Crumb", "$RegCrumb")

        try
        {
            $response = Invoke-WebRequest -Uri $url -Headers $Headers -Method POST
        }
        catch
        {           
            Write-Error "Stopping of job failed! " $_.Exception.Response.StatusCode.Value__
        }       
    }
}
I hope this few lines of code can make your day easier.
 

2018-10-16

Jenkins checkout git by commit id parameter

Discussion forums on Internet are providing answers for your question "how to check out specific git hash in Jenkins" quite easily for a manual procedure, but if you want to do it programmatically inside pipeline defined in Jenkins file or even by parameter problems raise.


It makes sense to check out specific git hash because it's unique inside repository and if you add git sha in job configuration GUI (Branch Specifier (blank for 'any')) then you really get the specific version in your workspace, so where is the problem?


Inside pipeline, block checkout you need to echo this commit from the variable by only one syntax even there are at least 3 other different ways usually works for printing the variable.

checkout([$class: 'GitSCM', branches: [[name: "ECHO GIT SHA HERE"]], userRemoteConfigs: [[credentialsId: 'string', url: 'string']]])

So the only one correct way is to use:
  • branches: [[name: "${params.BRANCH_NAME}"]],

because this are not working (but they are still printing value):
  • branches: [[name: env.BRANCH_NAME]], 
  • branches: [[name: ${env.BRANCH_NAME}]], 
  • branches: [[name: "${BRANCH_NAME}"]],


So to solve this I burned many hours. The syntax of Groovy is not enough mature yet, anyway I hope this can help you and if you need to do more magic with parameters as git values, I can recommend this plugin.

2018-09-10

Jenkins pipeline if-else for null variable

I was struggling few days with solving scripting problem in Jenkins Pipeline job definition. Since my Powershell scripts are using parameters from Jenkins and accepting of zero lenght / null values is problem in command line. So how to secure the script?

It was about variable $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT whis is empty unless first run was actually successful, but you need to think about it in script definition. It's about one ternary operation in any normal scripting language, but not in Groovy which is used in Jenkins pipeline.

So how to do? Option one is stage based:
stage('First-run')
{
when { environment name: 'GIT_PREVIOUS_SUCCESSFUL_COMMIT', value: ''
}
steps
{
echo 'There is no successful previous build, need to run completely.'
}
}

stage('Regular-run')
{
when { not { environment name: 'GIT_PREVIOUS_SUCCESSFUL_COMMIT', value: '' }}
steps
{
echo "Regular run with ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
powershell 'powershell -File $env:WORKSPACE\\script.ps1 -phrase "start" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL'
}
}
There you see that variable is checked for step block and block is executed only when variable fits. This solution sometimes not fulfill all requirements of condition, so there is also another solution for inside if-else expression.

stage('Everytime-run')
{
steps
{
script
{
if(env.GIT_PREVIOUS_SUCCESSFUL_COMMIT !=  null)
{
echo "PREVIOUS COMMIT IS NOT NULL - ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
powershell 'powershell -File $env:WORKSPACE\\script.ps1 -phrase "start" -buildNumber $env:BUILD_NUMBER -gitprevious $env:GIT_PREVIOUS_SUCCESSFUL_COMMIT -gitcurrent $env:GIT_COMMIT -jenkinsUrl $env:JENKINS_URL'
}
else
{
echo 'PREVIOUS COMMIT IS NULL'
}
}
}

}
Exploration of these constructions took me lot of time, so I hope you can solve it without issues.

2018-08-07

Jenkins pipeline calls cmd command

When you need to call cmd command from Jenkins pipeline script you can do it in following way. I am just storing that piece of code here.
steps
  {  
   script
    {
     env.GitCurrentHash=bat(returnStdout: true, script: "@echo off | git --git-dir=${WORKSPACE}\\.git rev-parse origin/${branch}").trim()
    }
  
echo "Current Git Hash: ${GitCurrentHash}"
   echo "Current Git Hash: ${GIT_COMMIT}"
  }
That's all...

2018-04-16

Přesměrování IIS stránky na localhost

Na testovacím Windows serveru s IIS beží aplikace, která používá Apache na lokálním portu 8080, jak zpřístupnit tuto webovou stránku uživatelům, kteří se nenacházejí na serveru lokálně?

Server IIS (ver 10) hostí nějaké testovací aplikace pro platformu .Net a je potřeba mít IIS server funkční, zároveň to znamená, že IIS přebije konfiguraci standalone aplikace s Apache a je tedy potřeba předávat požadavek z vnějšího rozhraní na localhost a zpátky. 

Tohoto je možné dosáhnout založením "site" webové aplikace v konfiguraci IIS. Pod jejím jménem, které by mělo být v DNS bude aplikace přístupná světu. Poté v konfiguraci nalezněte URL Rewrite => Add Rule(s) => Reverse Proxy. Příchozí pravidlo obsahuje místo, kam bude požadavek přesměrován, tedy na localhost:8080 bez http, odchozí pravidlo zůstane nevyplněno.

V případě, že editujete existující pravidlo je nastavení, "Matches the Pattern", "Regular Expressions" a Pattern "(.*)" - bez uvozovek. Rewrite URL tak bude "http://localhost:8080/{R:1}", zaškrknuto Append Query String a Stop Processing subsequent rules.

Případně to lze také zařídit konfiguračním souborem web.config v kořenovém adresáři této webové aplikace. Stránka localhost:8080 je ta lokální a veřejné jméno se v konfiguraci nevyskytuje.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8080/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
Ověření konfigurace je prostým otevřením webovky. Objevuje-li se chyba 500 či obecně 5xx, pak je něco nakonfigurováno špatně na IIS, jde-li stránka na localhostu.

2018-03-15

Chyba Attempting to recover installation a oprava

Tak jako mnoha jiným uživatelům se na jednom notebooku o který se starám zobrazila hláška
Attempting to recover installation, Restoring your version of Windows
Kdy se počítač neustále restartuje, ale nic se neděje. Tato chyba se zobrazuje po pokusu o aktualizaci Windows 10 na verzi Creators Update vydání 16229. Aktualizace se jako všem zasekla na 33%. Všechny zajímá, jak se této hlášky zbavit:

Postupoval jsem vložením instačního média Windows 10 (USB Creation Tool) a nabootování z něj jsem zkoušel automatickou opravu, bod obnovené nebo návrat k předchozí verzi. Něco z toho musí zafungovat jinak je problém většího rázu. Podstatné je znovu spustit předchozí systém.

Jak se vyvarovat chyby znovu? U mě zafungovala aktualizace všech starých ovladačů ve Windows pomocí utility Lenovo System Update část Driver check - to bylo značně důležité. Taktéž jsem provedl kontrolu nástrojem DISM - příkazy v tomto odkazu část 12.

Poté již aktualizace proběhla bez obtíží a systém dále funguje.

2017-12-30

Aktualizace Windows 10 chybí ovladače

U staršího, ale vcelku obstojně fungujícího notebooku Toshiba proběhl automatický upgrade Windows 10 na aktuální verzi s podtitulem Fall Creators Update. 


Po dokončení aktualizace však přestaly fungovat téměř všechny periferie v počítači, zejména síťová rozhraní WiFi a Ethernet, čímž se stal počítač nepoužitelný.

Vložka: protože OS byl ještě z původních z Windows 7, podezříval jsem nějaký starý nepořádek, že dělá neplechu. Po reinstalaci na aktuální verzi W10 a opětovném doinstalování všech aktualizací se situace opakovala, takže chyba je zjevně softwarového charakteru na úrovni ovladačů, nicméně se nedá vyřešit přeinstalací driverů.


Řešení: je potřeba zapnout zámek PCI sběrnice. To se provede příkazy:

  • Spustit nebo klávesovou zkratkou Win + R
  • msconfig.exe
  • záložka Spouštění počítače
  • při vybrání výchozí položky (pokud je jich více) klepnout na Upřesnit možnosti
  • zvolit a zaškrtnout Uzamčení PCI
  • OK, OK, OK, restartovat



Po restartu již většina zařízení nepíše chybu "Zařízení se nepodařilo spustit (Kód 10)", zamykání PCI sběrnice totiž zajistí, že se při spouštění OS nezmění IRQ adresa a systém ví, kde daný hardware je. Hlavně, že to funguje...

2017-09-17

Intel HAXM is required to run this AVD a vůbec VT-x u Android Studia

Vyčerpané místo na disku mě donutilo reinstalovat Windows a s tím i všechny mé vývojářské nástroje, což je vždycky peklo, neboť po reinstalaci Visual Studia a Android Studia jsem byl opět téměř bez místa na disku (ach ten 128 GB oddíl kvůli SSD).


Při té příležitosti jsem si vzpomněl na 3 roky starý problém s během Android Virtual Device a vůbec virtuálních strojů pod Windows (10). První návod zní zapnout podporu VT-x (tedy běhu instrukcí pro virtualizaci na CPU) v BIOSu, ale to dělám standardně. Přesto se AVD stále nechtělo spustit a akci blokovalo s hláškou:
Intel HAXM is required to run this AVD. Enable VT-x in your BIOS security settings...
Rychlý test toho, že problém je na systémové úrovni se dá provést například pokusem o spuštění nějakého virtuálního počítače skrz VirtualBox, kde vyskakuje stejná hláška.


Nicméně fakt, že problém není HW charakteru, ověří utilita Intel HAXM (předpokládám, že jej máte nainstalovaný), kdy s pomocí příkazového řádku nalistujete do složky:
cd C:\Android\sdk\extras\intel\Hardware_Accelerated_Execution_Manager
a spustíte nástroj haxm_check.exe, viz obrázek.


Příčinu bychom měli diagnostikovánu, ale jak ji odstranit? V mém případě je na vině mnou doporučovaný antivir Avast, který instrukce VT-x blokuje z bezpečnostních důvodů. Jako důvod  je dobrý, ale hláška o takové akci by byla více než vhodná.

Je tedy nutné otevřít okno antiviru, klepnout na položku Nastavení (vlevo dole), přejít do části Řešení problémů a zaškrtnout položku "Povolit hardwarovou virtualizaci". 



Po restartu se problém s VirtualBoxem vyřeší, ale Android studio stále nespolupracuje, protože přišlo s druhou hláškou:
/dev/kvm not found
Tato zpráva je na Windows zařízení více než podezřelá, nicméně internetová fóra si s ní již umí poradit. 


Nutností je odstranit přes Ovládací panely předchozí instalaci Intel HAXM a nainstalovat ji ručně ze stránek Intelu. Po stáhnutí haxm-windows_v6_2_1 a úspěšné instalaci se již Android Emulator spouští bez komplikací a je možné se tedy vrátit k původní činnosti.


2017-05-31

CoolPad Porto E560 drivers & firmware

I get this phone for free from friend because it had broken screen but after some time I decide to use motherboard in another phone, so I have to turn device on but I found that phone is locked by pattern and I need to get rid off it. So how to remove forgotten lock gesture?



First I tried one of milion advices on the Internet but they didnt work especially "wipe data/factory reset" method, so I decided that I need to reflash firmware inside. You need to download driver + firmware package (mirror), marked also as Coolpad_Sky_Mini_E560 5.1.222.38.P1.151022.KMINI.ap. Password is www.firmwarelink.com

What to do next? Install driver from ZIP file. Basically it is same package as is located on phone virtual CD-ROM drive. It contains regular MTP driver, but also ADB and Bootrecord driver, so you need all of them. 

Next is instalation of YGDP tool. When is installed enter it by "password" 369. Then click to Config and select 5.1.222.38.P1.151022.KMINI.ap.CPB file from ZIP - no more selection needed. After this click on start and software starts to wait for phone in proper bootmode.

How to put device to right mode? First is nessesary to turn it off and start it with magic combination with holding VOLUME UP and POWER button until special menu is selected.

Usually it is enought on Android device to only press "wipe data/factory reset" and phone is correctly deleted with all user data but I dont know why but it didnt work on my CoolPad Porto E560.

So we are in recovery mode where you should go to option "Restart to bootloader mode" and wait until computer recognize correct driver. At the same time when is installed YGDP app starts to be ready for upload firmware file. 

In next step phone asks you for confirmation of flashing and after this it takes 10 minutes to upload to phone, install and restart. So this is all how to reinstall firmware on this already old phone. This step helped me to remove forgotten locking pattern.

Immediately when I connected device to internet it asked me for downloading OTA update, so I did it and phone is now in most updated version. I hope it helped you!

2017-05-20

Samsung NX 1000 a cloudové funkce

Pořídil jsem si bezzrcadlovku Samsung NX 1000 z druhé ruky a než mi ji stihli ukradnout, tak jsem zjistil, že přítomná WiFi je sice funkční, ale že nyní již nepodporované aplikace nefungují. 


Přesněji po spuštění, asi nejužitečnější utility, Skydrive vyškočí hláška:
Security Error: The server certificate could not be verified
Předpokládám, že jde o problém způsobený přejmenováním služby Skydrive na současný OneDrive a nedá se s tím nic udělat... Aktualizace firmware nepomůže a na jiný způsob update jsem nepřišel. Přítomný upload fotek na Facebook i přímo do telefonu funguje bez zvláštních obtíží...


2016-11-17

Počítač se nezapíná "watchdog initiation" error

Jednoho pěkného večera přistála v mém Messengeru žádost o záchranu: Počítač s Windows 10 se nespouští, točí se kolečko, ale místo přihlašovací obrazovky se objeví chyba "Phase 0: Starting Watch Dog Initiation", konkrétně tedy:
PHASE 0
- starting watch dog initialization
- loading configuration( root kernel, set up)
- pre initialization events
- creating watch dog dynamic key list
- sub systems initialization
- finished
Phase 1:
- Initialize Components
- starting reactor
- starting components
- starting internal subsystems
- starting command channels
- Srm start actions
- starting external subsystems- finished

Nicméně na konci se nestane nic a počítač je zamrzlý v tomto bodě. Co s tím? Předně odpojit všechny flešky, disky, karty a jiná paměťová média z počítače. Chybu způsobuje antivir od AVG, který na nich možná našel něco škodlivého. Pokud nic připojeného není nebo to nepomohlo, tak zkuste další způsob.



Vypněte počítač podržením zapínacího tlačítka > 4 vteřiny. Po vypnutí vytáhněte baterku (pokud jde o notebook) a znova zapněte pouze přes kabel bez akumulátoru. Ve chvíli kdy se objeví to Windowsácké spouštěcí kolečko vytáhněte šňůru napájení z notebooku / restartujte klasický počítač tlačítkem. Situaci opakujte 3x a poté by se mělo objevit tabulka s pokusem o automatickou opravu.


Po úspěšném spuštění Nástroje pro odstraňování chyb se počítač zeptá, zda-li jej chcete restartovat nebo pokračovat Pokročilou opravou, zvolte pokročilou, Oprava spouštění, něco zašramotí a počítač se zeptá na restartování. Poté počítač najede normálně a/nebo se zeptá na možnost Nouzového spuštění se sítí, zvolte tedy tento režim. 


Po nouzovém zapnutí počítač běžným způsobem restartujte a mělo by být po problému. V každém dalším jiném případě postup opakujte a zvolte jinou možnost v Nástroji pro odstraňování chyb. Poslední možností v Nouzovém režimu je odinstalace antiviru AVG nástrojem AVG remover.


Doufám, že to pomohlo. Zdroj inspirace k řešení v angličtině.

2016-08-27

How to set up Eduroam at University of Vaasa or elsewhere

I was lately moved from Czech republic to Finland when my exchange program starts. It was change of absolutely anythink in live. So one of these changes is group of people around me and their technical skills. This is reason why to publish first tutorial in English about putting work on Eduroam WiFi.


Eduroam is academic wireless network spreaded over majority of universities over the world. Principe is in idea, that you don't must to set up your connectivity on every place which you are visiting.  This is great option to get internet access on many parts of world or at least Europe.

Please folow several easy steps to have permanent access to this network:

1. First, connect Eduroam with your device


2. Next there will be showed page with technical issues or you must to call it manually.


3. Then you must change verification phase 2 to protocol MSCHAPv2.

4a. Fill your username (or login) followed with symbol @ and domain name of your home university (should be like website without www)


4b. Or you can also use local credentials with login@student.uwasa.fi


5. Anonymous indentity is not filled
6. To password field please insert your password.


So there are only few steps, but you will get many benefits of connecting to the academic world. Enjoy it! There is also possibility to set up VPN connection (tutorial in Czech with pictures)

If you need more help or you are try to connect from another type of device, try tutorials from University of Ostrava and just use another credentials.

2016-07-25

Asus EEE 1225c a Windows 10

Dostal se mi na stůl požadavek na přeinstalaci obstarožního netbooku Asus EEE PC 1225c. Vzhledem k tomu, že má legální licenci Windows 7, mě automaticky napadlo jej upgradovat na Windows 10 a prodloužit tak licenční život operačního systému, nicméně nedělejte to.

Zásadním problémem je totiž instalovaná grafická karta, resp. čipset, protože Intel GMA 3650 (obecně 3600 series) nemá podporu ovladačů pro novější systémy než Windows 7 a Intel prohlásil, že nikdy nebudou. Samotný Asus pak u tohoto modelu nepodporuje 64 bitové systémy.

Nejprve jsem totiž nainstaloval Windows 10 Pro x64 a zjistil, že ovladač grafického adaptéru neexistuje. Dobrá, udělal jsem reinstalaci na Windows 10 Pro x32 a zjistil, že ovladač grafického adaptéru nelze použít z Windows 7 x32 z oficiální distribuce, protože je nestabilní. 

Nakonec mě to hraní přestalo bavit a vrátil jsem do netbooku autentické Windows 7 x32, což pokud uvažujete o upgradu vřele doporučuji i vám, ušetříte si čas.

2016-06-15

GetSimple CMS na Wedosu

Při standardní instalaci redakčního systému GetSimple od verze 3.3.10+ na hosting Wedos nastane problém s chybou serveru díky kterému stránky nefungují.
Internal Server Error
Pri zpracovani pozadavku doslo k vnitrni chybe. Pravdepodobne se jedna o chybu v .htaccess souboru.
Ctete instrukce v nasi znalostni bazi: Chyba 500 - Internal Server Error

Pro prvotní zprovoznění je třeba zakomentovat křížkem v .htaccess souboru v kořenovém adresáři webu řádek
#Follow symbolink links, This is required for rewrites on some hosts

#Options +FollowSymLinks
Čímž dojde k oživení webu. Teď nastává už jen problém s přepisováním cesty, neboť GetSimple CMS detekuje, že jeho cesta k souborům na Wedosu je namísto
http://test.domain.tld/
taková
http://test.domain.tld/domains/test.domain.tld/
Tuto změnu proveďte přímo v administraci redakčního systému (test.domain.tld/admin), kde se nastavuje adresa webové prezentace.

Dále ve složce /data/uploads zakomentujte křížkem řádek SetHandler GS_DISABLED_SECURITY
#SetHandler GS_DISABLED_SECURITY
dojte tím k zprovoznění čtení souborů ze složky uploads

Dále jsem se dostal na neprůchozí hlášku:
Unable to open /data/web/virtuals/00000/virtual/www/domains/domain.tld/theme/
V tomto momentě se mi zobrazovala jenom bílá stránka bez chyby. Nedařilo se mi vytvořit novou stránku a to vše díky nedostupnosti souborů šablony ze složky /theme/, snažil jsem se to různě vyřešit, nakonec pomohlo až smazání všech souborů a jejich opětovné nahrání i se všemi výše uvedenými opravami.

Postupem času provádím další provozní vylepšení, pokud máte nějaký dotaz nebo chcete přispět svou troškou do mlýna, tak můžete v komentářích níže.

2016-05-19

Google Formulář: použití vzorce na nový řádek

Jako spolupořadateli Mistrovství ČR ve fyzické kondici mi připadl úkol provést automatizaci některých procesů v rámci kterých jsem použil dosud nevyzkoušené postupy.


Například jsem řešil, jak vypočítat v Tabulkách Google vzorec nad novou odpovědí z Google Formuláře. V čem je problém? Google Form totiž nové řádky vkládá (nepřepisuje) a tak se automaticky nerozkopíruje vzorec z buňky, která byla pouze roztažena dolů na prázdná pole.


Řešením je konstrukce se vzorcem ARRAYFORMULA (česky maticový vzorec), která funguje tím způsobem, že do ní vložený vzorec aplikuje na všechny následující řádky podle zadání. Například:
=ARRAYFORMULA(A2:A+B2:B25)
Provede sečtení všech hodnot ve sloupci A se všemi v poli B2 až B25, přičemž je tento vzorec umístěn pouze v jedné buňce C3. Toto není těžké pochopit. Problém nastává, pokud začnete vzorec krmit složitějšími daty, protože má různá omezení. Například neumí logickou konstrukci OR, případně provádění agregačních funkcí jako COUNT, SUM, atp. 

Můj problém spočíval v tom, že jsem potřeboval shlukovat soutěžící do kategorií podle pohlaví a věku, přičemž jsem musel minimalizovat použití složitějších logických funkcí, takže jsem nakonec vytvořil příšernou, leč funkční kaskádu podmínek IF.
ARRAYFORMULA(
IF(G2:G="";
        "";
        IF(G2:G = "Muž";
                IF(year(now()) - D2:D<20;
                        "junior";
                        IF(year(now()) - D2:D<50;
                                "hlavní";
                                IF(year(now()) - D2:D<100;
                                        "senior";
                                        "chyba věku")))));
                IF(year(now()) - D2:D<20;
                        "juniorka";
                         IF(year(now()) - D2:D<50;
                                "hlavní";
                                 IF(year(now()) - D2:D<100;
                                        "seniorka";
                                        "
chyba věku"))))))

Pro upřesnění v polích "G" jsou textově informace, zda-li je závodník Muž či Žena a v "D" má rok narození. Příklad uvádím proto, že je velmi pravděpodobné, že řešíte něco podobného a inspirace není od věci, proto koukněte třeba sem.

Zajímavost na závěr: Tato funkce není (alespoň doposud) implementována v MS Office, takže po stažení dokumentu v XLS souboru se =Arrayformula() sama přemění na pouhý vzorec nad buňkami. Mějte to na paměti, až se budete snažit uploadovat zpět do Google Docs dříve stažený soubor.

2016-02-25

Jak využít OneDrive s Office 365 na VŠB k soukromému účtu

Tento příspěvek je vhodný pro studenty VŠB a dalších škol (UPOL, ...), kteří mají ke svému školnímu @vsb.cz účtu připojeno předplatné Office 365 s 1 TB úložného prostoru zdarma a zároveň používají soukromý Microsoft account @outlook.com či jiný.



V loňském roce (2015) jsem jako spousta lidí získal od Microsoftu tzv. Bonus nadšence pro svůj soukromý OneDrive účet. Přibylo mi tedy 100 GB na celkových 134 GB zdarma. V dobrém rozmaru jsem tedy postupně všechny kritické souborové části systému začal synchronizovat do tohoto cloudového uložistě. 



Nyní však uplynul rok a bonusové uložiště zmizelo a já zjistil, že do svých standardních 34 GB asi neuložím existujících 70 GB dat. Nastala tedy otázka, co s tím udělat, protože společně s překročením limitu (softquota) se již neprovádí synchronizace, což mě výrazně omezuje v používání mých 2 počítačů.


Kromě nezbytného úklidu a objevu, že mám v dokumentech zasynchronizované i nějaké filmy jsem také zjistil, že největší objem dat spotřebovává má fotogalerie ze zrcadlovky. Tu mám samozřejmě všelijak redundantně zálohovanou, ale objevil jsem pohodlí mít ji vždy při sobě v podobě cloudové zálohy a i nadále si chci tento způsob udržet. Vy si můžete místo fotogalerie dosadit jakoukoliv pro vás důležitou, ale objemnou složku.



Možná jste mezi řádky vyčetli, že mám 2 vzájemně neslučitelné Microsoft účty - soukromý a školní. Je to pozůstatek z doby, kdy jsem jako "early adopter" měl svůj účet mnohem dříve, než M$ zahájil podporu svými službami pro univerzity, ale věřím, že i spousta z vás má pro pocit jistoty svůj vlastní účet a ten školní má jen pro přístup do emailu a ke stažení Office 2013.



Zbývá jen vymyslet způsob, jak propojit svých soukromých 34 GB zdarma s uložištěm s akademickýou licencí o velikosti 1 TB. No nelze to tak snadno, ale lze mít tato dvě místa připojena k jednomu nebo více počítačů. 


Jak na to? Předpokládám, že se ve vašem počítači nachází nainstalovaná sada Office 2013 u které se nachází také podprogram OneDrive pro firmy 2013, který spusťte z nabídky Start. Dále se přihlašte z webového rozhraní Office 365 (loginem v číselném tvaru se @vsb.cz a LDAP heslem) a přejděte do aplikace OneDrive.
https://vsb-my.sharepoint.com/personal/login0000_vsb_cz/Documents/
Zde vytvořte novou složku, či jen zkopírujte URL a tuto vložte do menu klienta OneDrive for Business ve vašem počítači - položka "Synchronizovat novou knihovnu". Poté se provede prolinkování a zahájí synchronizace, která veskrze probíhá podobně jako u běžného OneDrive. Já bych možná řekl, že ještě lépe, neboť obsahuje položku pozastavit synchronizaci, která u soukromého účtu chybí.






Na druhém počítači pak provedete stejným postupem přidání složky do klienta a můžete vesele synchronizovat. Pokud nechcete mít všude všechno, pak je potřeba ručně přidávat jednotlivé adresy konkrétních složek. Jak přidat výjimku hromadně jsem zatím neobjevil.



Tento postup nahradí/doplní používání bezplatných peer-to-peer synchronizací přes aplikace Syncthing nebo dřívější BitTorrent Sync. (který ovšem přešel do placeného režimu) Jak říkám, toto řešení využívá výhody akademického účtu, bez něj nebo bez předplatného Office 365 není příliš praktický.



Pokud patříte do vysokoškolského prostředí, které nemá Office 365 (například Ostravská univerzita) je možné alternativně (nebo duálně) využít také 100 GB uložiště na sítí akademického internetového poskytovatele připojení sdružení Cesnet, který provozuje rovněž službu OwnCloud. Tento disk je možné rovněž připojit k systému Windows i jinému.

Jaký druh synchronizace / zálohování objemných dat používáte vy mezi více počítači?

2016-02-14

Set-top-box k O2TV pro další televizi zdarma

Dostal se ke mně zajímavý úkol: Jeden z klientů, kterému se starám o IT infrastrukturu mě požádal o konzultaci k zakoupení dalšího O2TV přijímače k další televizi, kterou má doma. Technicky nebylo možné koupit jednoduše a draze nový tuner, ale sestavil jsem jiné řešení, které bylo zdarma. Protože se z toho vyvinul docela zajímavý projekt, tak by byla škoda se o něj nepodělit se svými čtenáři.

Pokud si nechcete přečíst poutavou omáčku, skočte na technické řešení níže, na konci je pak nějaké souhrnné zamyšlení.

Nejprve uvedení do problematiky: O2TV je placená služba společnosti O2, která vám zprostředkuje příjem televizního signálu prostřednictvím jejich internetového připojení, které jede nejčastěji přes technologii VDSL. V principu tedy přijímáte televizní signál přes telefonní dráty. (což je samo o sobě docela legrační)



Platí se to jako služba a podle mě je to příšerně drahé na to, jak je to zbytečné. Běžné pozemní digitální vysílání (DVB-T) se dá dneska i v železobetonové zástavbě chytnout na anténu za 50 Kč namísto měsíčních 400 Kč za O2TV. (pokud tedy vůbec sledujete televizi) Jenže, pokud jste sportovní fanda, tak vám nic jiného nezbude, protože O2 zakoupila všechna vysílací práva na český, anglický a já nevím ještě jaký fotbal, takže už to nebude vysílat veřejně Česká televize a musíte si pořídit tuto službu, což je i popisovaný případ, proč si klient pořídil O2TV.

Doma má běžný xDSL modem ze kterého je rozveden internet ethernetem po celé obrovské prvorepublikové vile. Zažil jsem si tam horké chvilky už s touto kabeláží, neboť původně to (ne)jelo jen na modemu a WiFi repeateru. Po přepracování se mi podařilo dostat na 3 routery (už byly koupené) s AP pro zajištění konektivity v domě. Proč to zmiňuji? Modem leží v obýváku a hned vedle je hlavní TV ke které je připojený O2TV tuner, takže s první instalací nebyl vůbec problém. 



Jenže se objevila potřeba připojit i druhou televizi v patře (každý přece rád sleduje filmy z postele), ale z důvodu technického řešení je potřeba tuner připojit do prvního modemu, což bylo nějakých 30 metrů daleko. Tento drobný detail mi také málem unikl, naštěstí mám s modemy od O2 bohaté zkušenosti a tak jsem se rozpomněl na barevné značení portů.



Proč to tak je? O2TV neteče k vám domů stejným virtuálním okruhem jako internet (což ovšem neznamená, že ho nezpomaluje, protože dráty jsou jenom jedny). Řešeno je to pomocí technologie ATM (popisoval jsem je tady), která končí právě v modemu, kde je hranice mezi "velkým internetem" a vaší lokální sítí. TV tuner se potřebuje dostat k tomuto okruhu, který je v prvním modemu, přičemž vysílat televizní okruh dále do sítě rozumně nelze.

Takže co s tím? Oficiálním řešením je opravdu natáhnout další ethernetový kabel přes 4 místnosti a patro. Tento návrh však není paní domu povolen, prý už je tam kabelů dost a navíc AP s WiFi je nedaleko. Majitel se naštěstí rozvzpomene, že dostal od O2 přihlášení do O2TV GO a hned je jasno, kam další vývoj povede. O2TV GO je webové rozhraní k televiznímu vysílání nezávisle na poloze uživatele. Je tedy možné sledovat TV na mobilu či notebooku. Otázka zní, jak dostat obraz do televize, aby byl alespoň částečně zachován princip televizního přístroje.



Technicky

V tuto chvíli (1/2018) jsem měl problémy s během původního doplňku do Kodi (asi nějaká aktualizace), nicméně nabízí se nová varianta řešení, která je výrazně jednodušší a tím je Chromecast. Majitel má totiž dobrý (aktuální) telefon s Androidem a tak může díky tomuto zařízení streamovat obsah z mobilní aplikace O2TV do TV přes Chromecast, což značně usnadňuje celou komplexitu ovládání z postele. Navíc je to výrazně technicky/energeticky/kabelově jednodušší řešení. Doporučuji tedy zakoupit za cca 1200 Kč Google Chromecast a streamovat do něj O2TV z telefonu s Androidem, kde je aplikace O2TV.

Původní řešení s Kodi však ponechávám přístupné:
Analýza mě zavedla k bezplatné linuxové nástavbě XBMC nyní zvanou KODI se kterou jsem si už dříve hrál. Jde o software na principu Windows Media Center, tedy maximálně zjednodušené ovládání vhodné pro obrazovky televizí. Do tohoto prostředí existuje doplněk video.o2tvgo od vývojáře Štěpána Orta, který zajistí připojení O2TV, zbývá jenom domyslet, jak to celé zprovoznit.



Hledal jsme vhodné zařízení. Protože jde o pilotní projekt, který je určen k uživatelskému testování, tak jsem vybral jako hostitele starý notebook Lenovo 3000 C200 zde ve verzi s Intel Core 2 Duo a díky vykuchání jiného notebooku i s 3 GB RAM namísto původních 512 MB. Protože podkladovým operačním systémem je Kodibuntu a jiné, tak je soustava dost dobře přenositelná i na jiné platformy než x86-64, zejména tedy ARM o tom ale později.



Instalaci linuxové OS zvládne i "slepice, pokud nasypete zrní kolem enteru". Pokud si soustavu přepnete do čestiny (System => Settings => Appearance => International => Language), tak zvládnete přidat také O2TV doplněk z flash disku (Systém =>Nastavení => Doplňky => Instalovat doplněk ze zip souboru), tím by mohla být soustava hotova, zbývá ji jen připojit k TV za pomocí VGA kabelu na obraz a propojky dvou 3,5 mm jacků pro zvuk. Pokud máte k dispozici HDMI, tak to bude lepší volba. Jak jistě tušíte s vyladěním je práce více.




Připojení Kodi k WiFi

Ať jsem hledal jak jsem chtěl, v menu jsem neviděl možnost připojit pomocí WiFi. Pro nastavení WiFi se totiž musíte přihlásit v desktopovém prostředí, tedy opustit XMBC rozhraní. Popisují to následující obrázky:



Rozhraní Kodi zavřete v levém dolním rohu tlačítkem vypnout, dále pokračujete možností "ukončit", tím dojde k odhlášení.



Na další obrazovce přepnete v pravém horním rohu rozhraní Kodi na Lubuntu kam se přihlásíte stejným jménem a heslem, jako jste zadali při instalaci.



Po naloadování plochy najdete v pravém dolním rohu ikonu připojení k síti, kde si vyberete svou WiFi síť do které se za pomocí průvodce přihlásíte.



Po dokončení se odhlásíte přes tlačítko vypnout (opět pravý dolní roh) možností odhlásit se.



Na přihlašovací obrazovce se přepnete do rozhraní Kodi a přihlásíte jménem a heslem. Teď už bude XBMC přihlášeno přes WiFi. Změny provedete opět tímto postupem, protože zde chybí správce z prostředí.


Dálkový ovladač

Jednou z podmínek soustavy bylo, že princip zůstane podobný běžnému TV přístroji ovládání, tedy nesmí zůstat pouze na notebooku. Naštěstí to v XMBC už vyřešili, stačí si stáhnout aplikaci z Google Play, případně AppStore a mít připojený notebook a telefon ke stejné lokální síti (přes mobilní internet to nepojede).



Komu by se nechtělo (nemohl) instalovat aplikaci, tak lze zapnout ovládání přes webové rozhraní. Poté stačí naťukat v mobilu (opět ve stejné síti) IP adresu notebooku http://0.0.0.0:8080, ovládání je takto krkolomnější, zato pojede všude.




Bez chytrého telefonu se ale dá obejít zakoupením nějakého hardwarového ovladače. Proč to ale komplikovat...

Automatické spuštění TV

Je poněkud nepohodlné, když je při každém zapnutí notebooku nutné se doklikat ke spuštění doplňku. Naštěstí v Kodi lze autostart skriptem spustit rovnou doplněk. Zde už se ale zachází do linuxové podstaty systému. Pokusím se to popsat tak, aby to zvládl i laik.



Ze zapnutého Kodi proveďte klávesovou zkratkou CTRL + ALT + F1 přepnutí do konzolového zobrazení. (zpátky CTRL + ALT + F7) Zde se přihlásíte stále stejným jménem a heslem.



Zadejte příkaz ls -la a podívejte se, zda-li se ve vaší složce nachází skrytá složka .kodi, pokud ano pokračujte příkazy 
cd .kodi/userdata/
nano autoexec.py
otevře se textový editor (a automaticky se vytvoří soubor)  do kterého vepíšete následující dva řádky
import xbmc
xbmc.executebuiltin('RunAddon(plugin.video.o2tvgo)')
zkratkou CTRL + O soubor uložíte a CTRL + X zavřete. Po restartování vás tak přivítá automaticky spouštěný doplněk O2TV. Ještě by to chtělo, aby se po spuštění rovnou také zapnula nějaká TV stanice, protože takto to zůstane viset na seznamu stanic, což není příliš pohodlné. (na této úpravě pracuji)

Účet superuživatele

Protože už jsme dostali do terminálového prostředí, budeme potřebovat oprávnění roota pro některé operace. Je to naštěstí snadné, přihlaste se běžným uživatelem a pak si v interaktivním režimu nastavte toto další heslo. Příkaz zní: 
sudo passwd root

Nastavení napájení

Jelikož nechci, aby mi při přehrávání TV svítil displej notebooku, který navíc nelze za pomocí funkčních tlačítek na klávesnici zhasnout, tak bych chtěl, aby se při sklopení víka alespoň neuspal a přehrávání dále běželo. To je možné snadno nastavit. Přihlašte se účtem superuživatele a pokračujte příkazem: 
nano /etc/systemd/logind.conf
kde změňte následujcí řádky
HandleLidSwitch=ignore
HandePowerKey=hibernate
případně i nějaké jiné podle svých preferencí a opět uložte pomocí CTRL+O a ukončete CTRL+X, pro aplikování změn proveďte restart notebooku.




Nastavení hlasitosti

Zdálo se mi, že notebook má při každém spuštění poměrně nízkou hlasitost a nepamatuje si její zvýšení. Tak jsem na to šel bez servítek a při každém spuštění se hlasitost nastaví natrvdo na 90% maximální. Jemnou regulaci lze stejně provádět na televizi ovladačem nebo pomocí mobilního telefonu.



Pod právem superuživatele si otevřete konfigurační soubor příkazem 
nano /etc/rc.local
a před řádek exit 0 vepište příkaz 
amixer set 'Master' 90%

Nastavení obrazovky

Poslední věc, kterou zbývá udělat před definitivním spuštěním do provozu je připojit televizi a nastavit správné rozlišení obrazu, což může být trochu problém zejména s ohledem na to, že pravděpodobně také používáte nějaké staré zařízení jako přehrávač.



V ostrém provozu mi usnadňuje to, že starší televize LG 42 PJ350 má stejné maximální rozlišení jako notebook (1024x768). V testovacím prostředí mám však TV s FullHD, kde mi vadilo rozplácnutí obrazu. Problém je prostá duplikace obrazu na více cílů, kterou provádí Kodi. Naštestí lze nastavit, že LCD TV je zdroj primární a podle té se deformuje obraz na monitoru počítače, kde to nevadí. Tak jak na to?
Systém => Nastavení => Systém =>Video výstup => Monitor
kde VGA1 je výstup na televizi v požadovaném rozlišení a LVDS1 je DVI rozhraní obrazovky notebooku. V nabízených možnostech jste limitováni tím, co umí grafická karta notebooku.




Praktické zkušenosti

Jsou zatím příliš krátké, ale největší obtíže dělá probuzení soustavy dálkovým ovladačem - na WiFi to je docela problém. Dále spuštění stále obsahuje poměrně hodně kroků: otevřít notebook, zapnout jej, zapnout TV, přepnout vstup, vybrat kanál, zavřít notebook, otevřít aplikaci, což jak cítíte není moc pohodlné, navíc doplněk O2TV není také softwarově úplně dodělaný, což komfortu nepřidává.


Budoucnost projektu

V průběhu oživování mě napadlo postupně mnoho myšlenek, jak projekt posunout dále. Pokud odmyslíme softwarovou implementaci O2TV doplňku v Pythonu, pak je největší možnost pokroku v hardwaru na kterém běží a související architektuře.



Začal bych asi od Raspberry PI, které je pro toto použití jako dělané. Ještě vhodnější je Raspberry PI Zero, se svou velikostí totiž může zůstat viset na kabelech za TV. Evolucí by pak mohla být nějaká HDMI tyčinka jako Intel Compute Stick či Chromecast a podobné. (u nich už bohužel cena roste nahoru) A co takhle nechat běžet Kodi na NASu, Turrisu či jinde a přenášet přes DLNA pouze obraz? To už je ale opravdu výživné "scifi"...



Všemi těmito úpravami vlastně přidávám chytrost do hloupých televizí, ale co když už chytrou televizi máte? (já ji nemám, nemohu otestovat) Záleží, co v ní běží za systém. Největší výhodou by bylo do ní nativně dostat XBMC alias Kodi, jenže to může být problém (minimálně kvůli záruky). Většina chytrých televizí ovšem podporuje instalaci Android aplikací. Bohužel je zde problém v tom, že v katalozích aplikací se nacházejí jen očesané verze O2TV GO bez možnosti přijímat živé vysílání. V mobilní aplikaci pro telefony to jde - že by stačilo APK nainstalovat na TV? Obávám se, že to bude také docela oříšek. 



Vzhledem k tomu, kolik se mi doma povaluje již jinak nevyužitelného hardwaru, je pro mě zajímavá právě možnost jejich zužitkování jako rozhraní pro chytré televize. Dokonce jsem zvažoval nasazení operačního systému Windows 8 Embedded jako podkladu, ale u nich už roste výpočetní náročnost, kterou většinou nemám. Navíc celý systém by bylo komplikovanější dotvarovat do potřebné funkcionality - přeci jenom Kodi už je na tento účel přizpůsobeno z výroby.


Závěr

Celý článek pojednává o tom, jak poměrně složitě zprovoznit televizi na televizi. Řeší problém druhé a každé další televize pro službu O2TV. Jak jste jistě v úvodním tónu vycítili, moc se mi to takto nelíbí. Předně nemám rád IPTV, která spotřebovává internetové pásmo, za další se za ní musí platit a pak je tu to hrozné zpoždění



To už je pak jako ten známý vtip o tom, kdo a jak jásá pří vstřelení gólu ve fotbale, podle toho jak se dívá na televizní přenos. Až dosud nejprve jásali diváci analogového vysílání, po nich příjemci digitálního vysílání, a následně diváci IPTV, pak bouchá šampaňské a teprve pak se začínají radovat také diváci satelitní televize.

Ještě jsem neobjasnil, jak je to s tím zdarma. Všechna použitá řešení jsou založena na otevřeném software - tedy nemusí se za ně platit. Notebook či jakýkoliv kus výpočetního železa doma možná najdete také a O2TV není započítaná do nákladů. Protože používáte své přihlašovací údaje, tak se nedopouštíte ani ničeho nezákonného. Paráda, ne?



Pokud jste dočetli až sem, tak vás asi tato problematika zajímá - budu rád, pokud mi do diskuse přidáte svůj pohled na věc nebo svá kritéria a omezení při stavbě podobné soustavy. Jestli jste se jenom zasekli na postupu výše, pokusím se vám s pomoci se zprovozněním. Nejlepší bude, pokud se můžete podělit o zkušenosti s provozováním.