GNU/Linux >> Tutoriels Linux >  >> Linux

Installation de PowerShell Core sur un Raspberry Pi (alimenté par .NET Core)

Plus tôt cette semaine, j'ai configuré .NET Core et Docker sur un Raspberry Pi et j'ai découvert que je pouvais exécuter mon podcast site Web assez facilement sur un Pi. Vérifiez ce post car il se passe beaucoup de choses. Je peux tester dans un conteneur Linux et envoyer les résultats du test à l'hôte, puis les ouvrir dans VS. J'ai également exploré un Dockerfile raisonnablement complexe qui est à la fois multiarch et multistage. Je peux créer et tester de manière fiable mon site Web à l'intérieur d'un conteneur ou sur le métal nu de Windows ou Linux. Très amusant.

En tant que développeur Windows, j'ai beaucoup de fichiers batch/cmd comme "test.bat" ou "dockerbuild.bat". Ils commencent comme de petits éléments d'automatisation jetables, mais au fur et à mesure que le projet devient inévitablement plus complexe.

Je ne suis pas intéressé à "vendre" PowerShell à qui que ce soit. Si vous aimez bash, utilisez bash, c'est très bien, tout comme les scripts shell. PowerShell est orienté objet dans son pipeline, déplaçant des listes d'objets réels en tant que sortie standard. Ils sont différents et surtout, ils peuvent vivre ensemble. Tout comme vous pourriez appeler des scripts Python depuis bash, vous pouvez appeler des scripts PowerShell depuis bash, ou vice versa. Un autre outil de nos boîtes à outils.

PS /home/pi> Get-Process | Where-Object WorkingSet -gt 10MB

NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 10.92 890.87 917 917 docker-containe
0 0.00 35.64 1,140.29 449 449 dockerd
0 0.00 10.36 0.88 1272 037 light-locker
0 0.00 20.46 608.04 1245 037 lxpanel
0 0.00 69.06 32.30 3777 749 pwsh
0 0.00 31.60 107.74 647 647 Xorg
0 0.00 10.60 0.77 1279 037 zenity
0 0.00 10.52 0.77 1280 037 zenity

Les scripts bash et shell sont SUPER puissants. C'est tout un monde. Mais il est basé sur du texte (ou json pour certaines choses plus récentes) donc vous pensez souvent davantage au texte.

pi@raspberrypidotnet:~ $ ps aux | sort -rn -k 5,6 | head -n6
root 449 0.5 3.8 956240 36500 ? Ssl May17 19:00 /usr/bin/dockerd -H fd://
root 917 0.4 1.1 910492 11180 ? Ssl May17 14:51 docker-containerd --config /var/run/docker/containerd/containerd.toml
root 647 0.0 3.4 155608 32360 tty7 Ssl+ May17 1:47 /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
pi 1245 0.2 2.2 153132 20952 ? Sl May17 10:08 lxpanel --profile LXDE-pi
pi 1272 0.0 1.1 145928 10612 ? Sl May17 0:00 light-locker
pi 1279 0.0 1.1 145020 10856 ? Sl May17 0:00 zenity --warning --no-wrap --text

Vous pouvez l'emmener aussi loin que vous le souhaitez. Pour certains c'est du pouvoir intuitif, pour d'autres c'est du baroque.

pi@raspberrypidotnet:~ $ ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }'
0.00 Mb COMMAND
161.14 Mb /usr/bin/dockerd -H fd://
124.20 Mb docker-containerd --config /var/run/docker/containerd/containerd.toml
78.23 Mb lxpanel --profile LXDE-pi
66.31 Mb /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
61.66 Mb light-locker

Le fait est qu'il y a le choix. Voici un bel article sur PowerShell du point de vue d'un utilisateur Linux. Puis-je installer PowerShell sur mon Raspberry Pi (ou sur n'importe quelle machine Linux) et utiliser les mêmes scripts aux deux endroits ? OUI.

Pendant de nombreuses années, PowerShell était une chose Windows uniquement qui faisait partie de l'écosystème fermé de Windows. En fait, voici une vidéo de moi il y a près de 12 ans (je travaillais dans le secteur bancaire) parlant à Jeffrey Snover de PowerShell. Aujourd'hui, PowerShell est open source sur https://github.com/PowerShell avec de nombreux documents et scripts, également open source. PowerShell est pris en charge sur Windows, Mac et une demi-douzaine de Linux. Semble familier? C'est parce qu'il est alimenté (ahem) par .NET Core multiplateforme open source. Vous pouvez obtenir PowerShell Core 6.0 ici sur n'importe quelle plate-forme.

Vous ne voulez pas l'installer ? Démarrez-le dans Docker en quelques secondes avec

docker run -it microsoft/powershell

Sucré. Qu'en est-il de Raspbian sur mon Raspberry Pi basé sur ARMv7 ? J'utilisais Raspbian Jessie et PowerShell est pris en charge sur Raspbian Stretch (plus récent) donc j'ai mis à jour de Jesse vers Stretch (et rangé et fait le firmware pendant que j'y suis) avec :

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list
$ sudo sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/raspi.list
$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y
$ sudo rpi-update

Cool. Maintenant je suis sur Raspbian Stretch sur mon Raspberry Pi 3. Installons PowerShell ! Ce ne sont que les instructions de démarrage les plus élémentaires. Consultez GitHub pour obtenir des informations avancées et détaillées si vous rencontrez des problèmes avec les prérequis ou les chemins.

REMARQUE : Ici, je reçois PowerShell Core 6.0.2. Assurez-vous de vérifier la page des versions pour les versions plus récentes si vous lisez ceci à l'avenir. J'ai également utilisé 6.1.0 (en avant-première) avec succès. La prochaine préversion 6.1 sera mise à niveau vers .NET Core 2.1. Si vous êtes juste en train d'évaluer, obtenez le dernier aperçu car il contiendra les corrections de bogues les plus récentes.

$ sudo apt-get install libunwind8
$ wget https://github.com/PowerShell/PowerShell/releases/download/v6.0.2/powershell-6.0.2-linux-arm32.tar.gz
$ mkdir ~/powershell
$ tar -xvf ./powershell-6.0.2-linux-arm32.tar.gz -C ~/powershell
$ sudo ln -s ~/powershell/pwsh /usr/bin/pwsh
$ sudo ln -s ~/powershell/pwsh /usr/local/bin/powershell
$ powershell

Charmant.

GOTCHA : Parce que je suis passé de Jessie à Stretch, j'ai rencontré un bogue où libssl1.0.0 est chargé sur libssl1.0.2. Il s'agit d'un problème natif complexe avec une interaction entre PowerShell et .NET Core 2.0 qui est en cours de résolution. Seules les machines mises à niveau comme mind le feront, mais cela est facilement corrigé avec sudo apt-get remove libssl1.0.0

Maintenant, cela signifie que mes scripts de construction PowerShell peuvent fonctionner à la fois sur Windows et Linux. Ceci est un exemple profondément trivial (juste une ligne) mais notez le "shebang" en haut qui permet à Linux de savoir à quoi sert un fichier *.ps1. Cela signifie que je peux continuer à utiliser bash/zsh/fish sur Raspbian, mais toujours "build.ps1" ou "test.ps1" sur n'importe quelle plate-forme.

#!/usr/local/bin/powershell
dotnet watch --project .\hanselminutes.core.tests test /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=./lcov

Voici quelques exemples de PowerShell totalement aléatoires mais charmants :

PS /home/pi> Get-Date | Select-Object -Property * | ConvertTo-Json
{
"DisplayHint": 2,
"DateTime": "Sunday, May 20, 2018 5:55:35 AM",
"Date": "2018-05-20T00:00:00+00:00",
"Day": 20,
"DayOfWeek": 0,
"DayOfYear": 140,
"Hour": 5,
"Kind": 2,
"Millisecond": 502,
"Minute": 55,
"Month": 5,
"Second": 35,
"Ticks": 636623925355021162,
"TimeOfDay": {
"Ticks": 213355021162,
"Days": 0,
"Hours": 5,
"Milliseconds": 502,
"Minutes": 55,
"Seconds": 35,
"TotalDays": 0.24693868190046295,
"TotalHours": 5.9265283656111105,
"TotalMilliseconds": 21335502.1162,
"TotalMinutes": 355.59170193666665,
"TotalSeconds": 21335.502116199998
},
"Year": 2018
}

Vous pouvez transférer des objets PowerShell vers et depuis des objets, des tables de hachage, JSON, etc.

PS /home/pi> $hash | ConvertTo-Json
{
"Shape": "Square",
"Color": "Blue",
"Number": 1
}
PS /home/pi> $hash = @{ Number = 1; Shape = "Square"; Color = "Blue"}
PS /home/pi> $hash

Name Value
---- -----
Shape Square
Color Blue
Number 1


PS /home/pi> $hash | ConvertTo-Json
{
"Shape": "Square",
"Color": "Blue",
"Number": 1
}

En voici une belle de MCPMag :

PS /home/pi> $URI = "https://query.yahooapis.com/v1/public/yql?q=select  * from weather.forecast where woeid in (select woeid from geo.places(1) where  text='{0}, {1}')&format=json&env=store://datatables.org/alltableswithkeys"  -f 'Omaha','NE'
PS /home/pi> $Data = Invoke-RestMethod -Uri $URI
PS /home/pi> $Data.query.results.channel.item.forecast|Format-Table

code date day high low text
---- ---- --- ---- --- ----
39 20 May 2018 Sun 62 56 Scattered Showers
30 21 May 2018 Mon 78 53 Partly Cloudy
30 22 May 2018 Tue 88 61 Partly Cloudy
4 23 May 2018 Wed 89 67 Thunderstorms
4 24 May 2018 Thu 91 68 Thunderstorms
4 25 May 2018 Fri 92 69 Thunderstorms
34 26 May 2018 Sat 89 68 Mostly Sunny
34 27 May 2018 Sun 85 65 Mostly Sunny
30 28 May 2018 Mon 85 63 Partly Cloudy
47 29 May 2018 Tue 82 63 Scattered Thunderstorms

Ou un one-liner si vous voulez être odieux.

PS /home/pi> (Invoke-RestMethod -Uri  "https://query.yahooapis.com/v1/public/yql?q=select  * from weather.forecast where woeid in (select woeid from geo.places(1) where  text='Omaha, NE')&format=json&env=store://datatables.org/alltableswithkeys").query.results.channel.item.forecast|Format-Table

Exemple : Cela ne fonctionnera pas sur Linux car il utilise des AIP spécifiques à Windows, mais si vous avez PowerShell sur votre machine Windows, essayez ce one-liner pour une démo sympa :

iex (New-Object Net.WebClient).DownloadString("http://bit.ly/e0Mw9w")

Les pensées?

Parrain :Découvrez JetBrains Rider :un IDE .NET multiplateforme. Modifiez, refactorisez, testez et déboguez des applications ASP.NET, .NET Framework, .NET Core, Xamarin ou Unity. En savoir plus et télécharger une version d'essai de 30 jours !


Linux
  1. Comment installer et configurer Nagios Core sur Raspberry PI

  2. Visual Basic est-il pris en charge par .NET Core sous Linux ?

  3. Exécution d'une application ASP.NET Core autonome sur Ubuntu

  4. NuGet pour .NET Core sous Linux

  5. .NET core X509Store sur Linux

Installer Ubuntu MATE sur un Raspberry Pi

.NET Core et Docker

Création, exécution et test de .NET Core et ASP.NET Core 2.1 dans Docker sur un Raspberry Pi (ARM32)

.NET et Docker

Publication d'un site Web ASP.NET Core sur un hôte de machine virtuelle Linux bon marché

Comment installer (.NET Core) Dotnet Core sur les distributions Linux