GNU/Linux >> Tutoriales Linux >  >> Linux

Instalación de PowerShell Core en una Raspberry Pi (con tecnología de .NET Core)

A principios de esta semana configuré .NET Core y Docker en una Raspberry Pi y descubrí que podía ejecutar mi podcast sitio web con bastante facilidad en un Pi. Revisa esa publicación ya que están sucediendo muchas cosas. Puedo probar dentro de un contenedor de Linux y enviar los resultados de la prueba al host y luego abrirlos en VS. También exploré un Dockerfile razonablemente complejo que es tanto de varias arquitecturas como de varias etapas. Puedo construir y probar mi sitio web de manera confiable dentro de un contenedor o en Windows o Linux. Muy divertido.

Como desarrollador principal de Windows, tengo muchos archivos por lotes/cmd como "test.bat" o "dockerbuild.bat". Comienzan como pequeños fragmentos de automatización desechables, pero a medida que el proyecto se vuelve inevitablemente más complejo.

No me interesa "vender" PowerShell a nadie. Si te gusta bash, usa bash, es encantador, al igual que los scripts de shell. PowerShell está orientado a objetos en su canalización, moviendo listas de objetos reales como salida estándar. Son diferentes y lo más importante, pueden vivir juntos. Al igual que puede llamar a los scripts de Python desde bash, puede llamar a los scripts de PowerShell desde bash, o viceversa. Otra herramienta en nuestros kits de herramientas.

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

Los scripts Bash y Shell son SUPER poderosos. Es todo un mundo. Pero está basado en texto (o json para algunas cosas más nuevas), por lo que a menudo piensas más en el texto.

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

Puedes llevarlo tan lejos como quieras. Para algunos es poder intuitivo, para otros es barroco.

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

El punto es que hay elección. Aquí hay un buen artículo sobre PowerShell desde la perspectiva de un usuario de Linux. ¿Puedo instalar PowerShell en mi Raspberry Pi (o cualquier máquina Linux) y usar los mismos scripts en ambos lugares? SÍ.

Durante muchos años, PowerShell fue algo exclusivo de Windows que formaba parte del ecosistema cerrado de Windows. De hecho, aquí hay un video mío hace casi 12 años (trabajaba en la banca) hablando con Jeffrey Snover sobre PowerShell. Hoy, PowerShell es de código abierto en https://github.com/PowerShell con muchos documentos y scripts, también de código abierto. PowerShell es compatible con Windows, Mac y media docena de Linux. ¿Suena familiar? Esto se debe a que funciona (ejem) con .NET Core de plataforma cruzada de código abierto. Puede obtener PowerShell Core 6.0 aquí en cualquier plataforma.

¿No quieres instalarlo? Inícielo en Docker en segundos con

docker run -it microsoft/powershell

Dulce. ¿Qué hay de Raspbian en mi Raspberry Pi basado en ARMv7? Estaba ejecutando Raspbian Jessie y PowerShell es compatible con Raspbian Stretch (más reciente), así que actualicé de Jesse a Stretch (y ordené e hice el firmware mientras lo hacía) con:

$ 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

Enfriar. Ahora estoy en Raspbian Stretch en mi Raspberry Pi 3. ¡Vamos a instalar PowerShell! Estas son solo las instrucciones de inicio más básicas. Consulte GitHub para obtener información avanzada y detallada si tiene problemas con los requisitos previos o las rutas.

NOTA: Aquí obtengo PowerShell Core 6.0.2. Asegúrese de consultar la página de lanzamientos para ver los lanzamientos más nuevos si está leyendo esto en el futuro. También he usado 6.1.0 (en versión preliminar) con éxito. La próxima vista previa de 6.1 se actualizará a .NET Core 2.1. Si solo está evaluando, obtenga la vista previa más reciente, ya que tendrá las correcciones de errores más recientes.

$ 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

Encantador.

ENTENDIDO: Debido a que actualicé de Jessie a Stretch, me encontré con un error en el que libssl1.0.0 se cargaba sobre libssl1.0.2. Este es un problema nativo complejo con la interacción entre PowerShell y .NET Core 2.0 que se está solucionando. Solo las máquinas actualizadas como mind lo harán, pero se soluciona fácilmente con sudo apt-get remove libssl1.0.0

Ahora bien, esto significa que mis scripts de compilación de PowerShell pueden funcionar tanto en Windows como en Linux. Este es un ejemplo profundamente trivial (solo una línea), pero tenga en cuenta el "shebang" en la parte superior que le permite a Linux saber para qué sirve un archivo * .ps1. Eso significa que puedo seguir usando bash/zsh/fish en Raspbian, pero aún "build.ps1" o "test.ps1" en cualquier plataforma.

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

Aquí hay algunos ejemplos de PowerShell totalmente aleatorios pero encantadores:

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
}

Puede llevar objetos de PowerShell hacia y desde Objetos, Hashtables, 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
}

Aquí hay uno bueno 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

O una sola línea si quieres ser desagradable.

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

Ejemplo: Esto no funcionará en Linux, ya que usa AIP específicos de Windows, pero si tiene PowerShell en su máquina con Windows, pruebe este resumen para obtener una demostración genial:

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

¿Pensamientos?

Patrocinador :Consulte JetBrains Rider:un IDE .NET multiplataforma. Edite, refactorice, pruebe y depure aplicaciones ASP.NET, .NET Framework, .NET Core, Xamarin o Unity. Obtenga más información y descargue una versión de prueba de 30 días.


Linux
  1. Cómo instalar y configurar Nagios Core en Raspberry PI

  2. Cómo instalar .NET Core en Debian 10

  3. ¿Visual Basic es compatible con .NET Core en Linux?

  4. Manejo de nombres de archivo multiplataforma en .NET Core

  5. Ejecución de una aplicación ASP.NET Core autónoma en Ubuntu

Instalación de Ubuntu MATE en una Raspberry Pi

.NET Core y Docker

Creación, ejecución y prueba de .NET Core y ASP.NET Core 2.1 en Docker en una Raspberry Pi (ARM32)

.NET y Docker

Publicación de un sitio web ASP.NET Core en un host de máquina virtual Linux económico

Cómo instalar (.NET Core) Dotnet Core en distribuciones de Linux