GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Installieren von PowerShell Core auf einem Raspberry Pi (powered by .NET Core)

Anfang dieser Woche habe ich .NET Core und Docker auf einem Raspberry Pi eingerichtet und festgestellt, dass ich meinen Podcast ausführen kann Website ganz einfach auf einem Pi. Schauen Sie sich diesen Beitrag an, da viel los ist. Ich kann innerhalb eines Linux-Containers testen und die Testergebnisse an den Host ausgeben und sie dann in VS öffnen. Ich habe auch eine einigermaßen komplexe Dockerfile untersucht, die sowohl Multiarch als auch Multistage ist. Ich kann meine Website zuverlässig entweder in einem Container oder auf dem Bare Metal von Windows oder Linux erstellen und testen. Sehr lustig.

Als hauptsächlicher Windows-Entwickler habe ich viele Batch-/cmd-Dateien wie „test.bat“ oder „dockerbuild.bat“. Sie beginnen als kleine Wegwerfteile der Automatisierung, werden aber mit zunehmender Komplexität des Projekts unweigerlich komplexer.

Ich bin nicht daran interessiert, jemandem PowerShell zu "verkaufen". Wenn Sie Bash mögen, verwenden Sie Bash, es ist wunderbar, genauso wie Shell-Skripte. PowerShell ist in seiner Pipeline objektorientiert und verschiebt Listen realer Objekte als Standardausgabe. Sie sind verschieden und vor allem können sie zusammenleben. So wie Sie Python-Skripte von Bash aus aufrufen könnten, können Sie PowerShell-Skripts von Bash aus aufrufen oder umgekehrt. Ein weiteres Tool in unseren Toolkits.

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

Bash- und Shell-Skripte sind SUPER leistungsfähig. Es ist eine ganze Welt. Aber es ist textbasiert (oder json für einige neuere Dinge), sodass Sie oft mehr über Text nachdenken.

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

Sie können es so weit nehmen, wie Sie möchten. Für manche ist es intuitive Kraft, für andere Barock.

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

Punkt ist, es gibt die Wahl. Hier ist ein netter Artikel über PowerShell aus der Sicht eines Linux-Benutzers. Kann ich PowerShell auf meinem Raspberry Pi (oder einem beliebigen Linux-Computer) installieren und an beiden Orten dieselben Skripts verwenden? JA.

Viele Jahre lang war PowerShell ein reines Windows-Ding, das Teil des geschlossenen Windows-Ökosystems war. Tatsächlich ist hier ein Video von mir vor fast 12 Jahren (ich arbeitete im Bankwesen), in dem ich mit Jeffrey Snover über PowerShell sprach. Heute ist PowerShell Open Source unter https://github.com/PowerShell mit vielen Dokumenten und Skripten, ebenfalls Open Source. PowerShell wird unter Windows, Mac und einem halben Dutzend Linuxen unterstützt. Klingt bekannt? Das liegt daran, dass es (ähm) von Open Source Cross-Plattform .NET Core unterstützt wird. Sie können PowerShell Core 6.0 hier auf jeder Plattform herunterladen.

Sie möchten es nicht installieren? Starten Sie es in Docker in Sekundenschnelle mit

docker run -it microsoft/powershell

Süss. Wie wäre es mit Raspbian auf meinem ARMv7-basierten Raspberry Pi? Ich habe Raspbian Jessie ausgeführt und PowerShell wird von Raspbian Stretch (neuer) unterstützt, also habe ich ein Upgrade von Jesse auf Stretch durchgeführt (und dabei aufgeräumt und die Firmware erstellt) mit:

$ 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

Kühl. Jetzt bin ich auf Raspbian Stretch auf meinem Raspberry Pi 3. Lassen Sie uns PowerShell installieren! Dies sind nur die grundlegendsten Anweisungen für die ersten Schritte. Auf GitHub finden Sie erweiterte und detaillierte Informationen, wenn Sie Probleme mit Voraussetzungen oder Pfaden haben.

HINWEIS: Hier bekomme ich PowerShell Core 6.0.2. Achten Sie darauf, dass Sie auf der Veröffentlichungsseite nach neueren Veröffentlichungen suchen, wenn Sie dies in Zukunft lesen. Ich habe auch 6.1.0 (in der Vorschau) mit Erfolg verwendet. Die nächste Vorschauversion von 6.1 wird auf .NET Core 2.1 aktualisiert. Wenn Sie nur evaluieren, holen Sie sich die neueste Vorschau, da sie die neuesten Fehlerkorrekturen enthält.

$ 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

Schön.

GOTCHA: Da ich von Jessie auf Stretch aktualisiert habe, bin ich auf einen Fehler gestoßen, bei dem libssl1.0.0 über libssl1.0.2 geladen wird. Dies ist ein komplexes natives Problem mit der Interaktion zwischen PowerShell und .NET Core 2.0, das behoben wird. Nur aktualisierte Maschinen wie Mind werden es tun, aber es lässt sich leicht mit sudo apt-get remove libssl1.0.0 beheben

Das bedeutet nun, dass meine PowerShell-Build-Skripte sowohl unter Windows als auch unter Linux funktionieren können. Dies ist ein zutiefst triviales Beispiel (nur eine Zeile), aber beachten Sie den „Griff“ oben, der Linux mitteilt, wofür eine *.ps1-Datei gut ist. Das bedeutet, dass ich weiterhin bash/zsh/fish auf Raspbian verwenden kann, aber immer noch „build.ps1“ oder „test.ps1“ auf jeder Plattform.

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

Hier sind ein paar völlig zufällige, aber schöne PowerShell-Beispiele:

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
}

Sie können PowerShell-Objekte zu und von Objects, Hashtables, JSON usw. übernehmen.

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
}

Hier ist ein nettes von 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

Oder einen Einzeiler, wenn Sie unausstehlich sein wollen.

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

Beispiel: Dies funktioniert nicht unter Linux, da es Windows-spezifische AIPs verwendet, aber wenn Sie PowerShell auf Ihrem Windows-Rechner haben, probieren Sie diesen Einzeiler für eine coole Demo aus:

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

Gedanken?

Sponsor :Sehen Sie sich JetBrains Rider an:eine plattformübergreifende .NET-IDE. Bearbeiten, Refactoring, Testen und Debuggen von ASP.NET-, .NET Framework-, .NET Core-, Xamarin- oder Unity-Anwendungen. Erfahren Sie mehr und laden Sie eine 30-Tage-Testversion herunter!


Linux
  1. So installieren und konfigurieren Sie Nagios Core auf Raspberry PI

  2. So installieren Sie .NET Core unter Debian 10

  3. Wird Visual Basic von .NET Core unter Linux unterstützt?

  4. Plattformübergreifende Verarbeitung von Dateinamen in .NET Core

  5. Ausführen einer eigenständigen ASP.NET Core-Anwendung auf Ubuntu

Ubuntu MATE auf einem Raspberry Pi installieren

.NET Core und Docker

Erstellen, Ausführen und Testen von .NET Core und ASP.NET Core 2.1 in Docker auf einem Raspberry Pi (ARM32)

.NET und Docker

Veröffentlichen einer ASP.NET Core-Website auf einem günstigen Linux-VM-Host

So installieren Sie (.NET Core) Dotnet Core auf Linux-Distributionen