GNU/Linux >> Belajar Linux >  >> Linux

Menginstal PowerShell Core pada Raspberry Pi (didukung oleh .NET Core)

Awal minggu ini saya menyiapkan .NET Core dan Docker di Raspberry Pi dan menemukan bahwa saya dapat menjalankan podcast saya situs web dengan cukup mudah di Pi. Periksa posting itu karena ada banyak hal yang terjadi. Saya dapat menguji dalam Wadah Linux dan menampilkan hasil pengujian ke Host dan kemudian membukanya di VS. Saya juga menjelajahi Dockerfile yang cukup kompleks yang multiarch dan multistage. Saya dapat dengan andal membangun dan menguji situs web saya baik di dalam wadah atau di Windows atau Linux. Sangat menyenangkan.

Sebagai pengembang Windows, saya memiliki banyak file batch/cmd seperti "test.bat" atau "dockerbuild.bat." Mereka memulai sebagai bagian kecil dari otomatisasi, tetapi seiring dengan pertumbuhan proyek, pasti semakin kompleks.

Saya tidak tertarik untuk "menjual" PowerShell siapa pun. Jika Anda suka bash, gunakan bash, itu indah, seperti juga skrip shell. PowerShell berorientasi objek dalam salurannya, memindahkan daftar objek nyata sebagai output standar. Mereka berbeda dan yang terpenting, mereka bisa hidup bersama. Sama seperti Anda mungkin memanggil skrip Python dari bash, Anda dapat memanggil skrip PowerShell dari bash, atau sebaliknya. Alat lain di perangkat kami.

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

Skrip Bash dan shell SUPER kuat. Ini adalah seluruh dunia. Tapi ini berbasis teks (atau json untuk beberapa hal yang lebih baru) sehingga Anda sering lebih memikirkan teks.

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

Anda dapat mengambilnya sejauh yang Anda suka. Bagi sebagian orang itu adalah kekuatan intuitif, bagi yang lain, itu barok.

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

Intinya, ada pilihan. Inilah artikel bagus tentang PowerShell dari sudut pandang pengguna Linux. Bisakah saya menginstal PowerShell di Raspberry Pi saya (atau mesin Linux apa pun) dan menggunakan skrip yang sama di kedua tempat? YA.

Selama bertahun-tahun PowerShell adalah satu-satunya Windows yang merupakan bagian dari ekosistem Windows yang tertutup. Faktanya, inilah video saya hampir 12 tahun yang lalu (saya bekerja di perbankan) berbicara dengan Jeffrey Snover tentang PowerShell. Hari ini, PowerShell adalah open source di https://github.com/PowerShell dengan banyak dokumen dan skrip, juga open source. PowerShell didukung di Windows, Mac, dan setengah lusin Linux. Terdengar akrab? Itu karena didukung (ahem) oleh open source lintas platform .NET Core. Anda bisa mendapatkan PowerShell Core 6.0 di sini di platform apa pun.

Tidak ingin menginstalnya? Mulai di Docker dalam hitungan detik dengan

docker run -it microsoft/powershell

Manis. Bagaimana dengan Raspbian di Raspberry Pi berbasis ARMv7 saya? Saya menjalankan Raspbian Jessie dan PowerShell didukung di Raspbian Stretch (lebih baru) jadi saya memutakhirkan dari Jesse ke Stretch (dan merapikan dan mengerjakan firmware saat saya melakukannya) dengan:

$ 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

Dingin. Sekarang saya menggunakan Raspbian Stretch di Raspberry Pi 3. Mari instal PowerShell! Ini hanyalah instruksi Memulai yang paling dasar. Lihat GitHub untuk info lanjutan dan detail jika Anda memiliki masalah dengan prasyarat atau jalur.

CATATAN: Di sini saya mendapatkan PowerShell Core 6.0.2. Pastikan untuk memeriksa halaman rilis untuk rilis yang lebih baru jika Anda membaca ini di masa mendatang. Saya juga telah menggunakan 6.1.0 (dalam pratinjau) dengan sukses. Pratinjau 6.1 berikutnya akan ditingkatkan ke .NET Core 2.1. Jika Anda hanya mengevaluasi, dapatkan pratinjau terbaru karena akan ada perbaikan bug terbaru.

$ 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

Indah.

GOTCHA: Karena saya memutakhirkan dari Jessie ke Stretch, saya mengalami bug di mana libssl1.0.0 dimuat melalui libssl1.0.2. Ini adalah masalah asli yang kompleks dengan interaksi antara PowerShell dan .NET Core 2.0 yang sedang diperbaiki. Hanya mesin yang ditingkatkan seperti pikiran yang akan melakukannya, tetapi mudah diperbaiki dengan Sudo apt-get remove libssl1.0.0

Sekarang ini berarti skrip build PowerShell saya dapat bekerja di Windows dan Linux. Ini adalah contoh yang sangat sepele (hanya satu baris) tetapi perhatikan "shebang" di bagian atas yang memungkinkan Linux mengetahui untuk apa file *.ps1 itu. Itu berarti saya dapat terus menggunakan bash/zsh/fish di Raspbian, tetapi tetap menggunakan "build.ps1" atau "test.ps1" di platform apa pun.

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

Berikut adalah beberapa contoh PowerShell yang benar-benar acak tapi bagus:

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
}

Anda dapat membawa objek PowerShell ke dan dari Objects, Hashtables, JSON, dll.

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
}

Ini yang bagus dari 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

Atau satu kalimat jika Anda ingin menjadi menjengkelkan.

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

Contoh: Ini tidak akan berfungsi di Linux karena menggunakan AIP khusus Windows, tetapi jika Anda memiliki PowerShell di mesin Windows Anda, cobalah one-liner ini untuk demo keren:

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

Pikiran?

Sponsor :Lihat JetBrains Rider:IDE .NET lintas platform. Edit, refactor, uji dan debug aplikasi ASP.NET, .NET Framework, .NET Core, Xamarin atau Unity. Pelajari lebih lanjut dan unduh uji coba 30 hari!


Linux
  1. Cara Menginstal &Mengatur Nagios Core Di Raspberry PI

  2. Cara Menginstal .NET Core di Debian 10

  3. Penanganan nama file lintas platform di .NET Core

  1. Menginstal PowerShell di Kali Linux

  2. Apakah Visual Basic didukung oleh .NET Core di Linux?

  3. Menjalankan aplikasi ASP.NET Core mandiri di Ubuntu

  1. Cara menulis daemon linux dengan .Net Core

  2. NuGet untuk .NET Core di Linux

  3. .NET core X509Store di linux