Raspbian + Dotnet Core
Tags: raspbian, raspberrypi, dotentcore
Published: 2020-04-09 14:38:37

คำเตือน!! บทความนี้มีแต่ Text ไม่เหมาะกับผู้ที่ไม่ชอบอ่านหนังสือนะครับ :P

จริงๆ เคยคิดว่าอยากจะลองศึกษาเกี่ยวกับการใช้งาน dotnet core บน arm cpu ดู แต่ก็ไม่เคยได้ลองสักที มีแต่ได้เขียนบน Windows ซะเป็นส่วนใหญ่ เอาเป็นว่าวันนี้อยากจะลองติดตั้ง DotNet Core บน Raspbian หรือ OS ของ Raspberry Pi นั่นเอง
เริ่มเลยดีกว่า.... และขอข้ามขั้นตอนติดตั้ง Raspbian ไปเลยก็แล้วกัน

ขั้นตอนแรกสุด เราก็ต้องไปเอาไฟล์ของ Dot Net Core(ขอใช้ตัวย่อ .netCore แทน) จากเว็บกันก่อน โดยในที่นี้จะใช้ Version 3.1.201 สำหรับ SDK และ 3.1.3 สำหรับ runtime และจะใช้แบบ Arm32 ทั้งหมด (จริงๆ จะใช้แบบ Arm64 ก็ได้ แต่ว่าตั้งใจว่าจะเขียนใช้งานกับพวก Hardware ด้วย ซึ่ง libraries ที่มีตอนนี้ยังไม่รองรับ 64bit แบบเต็มๆ เหมือนกับ 32ิbit)

ให้เราโหลดไฟล์ลงมาที่ pi (ขอใช้แทนการเรียก Raspbian/Raspberry Pi) โดยใช้คำสั่งนี้

SDK
```
wget https://download.visualstudio.microsoft.com/download/pr/ccbcbf70-9911-40b1-a8cf-e018a13e720e/03c0621c6510f9c6f4cca6951f2cc1a4/dotnet-sdk-3.1.201-linux-arm.tar.gz
```

Runtime
```
wget https://download.visualstudio.microsoft.com/download/pr/c11e9248-404f-4e5b-bd99-175079419d6f/83902a43e06f9fb4e45a4c6a6d5afc0b/dotnet-runtime-3.1.3-linux-arm.tar.gz
```

Asp.net Core Runtime
```
wget https://download.visualstudio.microsoft.com/download/pr/b68cde83-05c7-4421-ad9a-3e6f2cc53824/876dbfc9b4521d3ca89a226c6438ffc1/aspnetcore-runtime-3.1.3-linux-arm.tar.gz
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/c81ecs8230mg03hby3fl.png)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/zyerwi28vftvhqwbb6tf.png)

สำหรับ .netCore เวอร์ชันใหม่ๆ สามารถเช็คได้จากลิงค์นี้ https://dotnet.microsoft.com/download

หลังจากที่เราโหลดไฟล์มาครบแล้ว ขั้นตอนต่อไปก็จะเป็นการติดตั้ง .netCore กันสักที โดยที่เราจะเริ่มจากสร้างโฟลเดอร์ dotnet-arm32 ที่ ~/ (หรือ $Home) -> ติดตั้ง SDK -> ติดตั้ง Runtime -> ติดตั้ง Asp.net Core Runtime
ซึ่งคำสั่งก็จะมีดังนี้

```
mkdir dotnet-arm32
tar zxf dotnet-sdk-3.1.201-linux-arm.tar.gz -C $HOME/dotnet-arm32
tar zxf dotnet-runtime-3.1.3-linux-arm.tar.gz -C $HOME/dotnet-arm32
tar zxf aspnetcore-runtime-3.1.3-linux-arm.tar.gz -C $HOME/dotnet-arm32

```

ขั้นตอนต่อไป เราก็จะทำการ setup path ให้กับ .netCore เพื่อให้สามารถเรียกใช้งานได้ โดยที่เราจะเพิ่มคำสั่งข้างล่างเข้าไปในไฟล์ .profile เพื่อให้สามารถเรียกใช้งานได้เลย โดยที่เราไม่ต้อง setup ทุกครั้งที่ต้องการใช้งาน

```
# set .NET Core SDK and Runtime path
export DOTNET_ROOT=$HOME/dotnet-arm32
export PATH=$PATH:$HOME/dotnet-arm32
```

เปิดไฟล์ .profile ขึ้นมาด้วยสิทธิ์ของ root ด้วยคำสั่ง

```
sudo nano .profile
```
แล้วจากนั้นก็เพิ่มคำสั่งเข้าไปที่ด้านล่างสุดของไฟล์ ดังภาพ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/74p3dyvyquiju9gaoonb.png)

จากนั้นให้สั่ง Reboot เครื่องใหม่เพื่อให้ pi อ่านค่า path ที่เพิ่มเข้าไปใหม่

หลังจากนั้นเมื่อ Reboot เสร็จแล้ว ให้ลองใช้คำสั่งนี้เพื่อแสดงรายละเอียดของ .netCore 

```
dotnet --info
```

ซึ่งก็จะได้รายละเอียดดังภาพ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mgg2il3vbn8zjxku36by.png)

เพี่ยงเท่านี้ก็จะสามารถใช้งาน .netCore บน pi ได้แล้ว แต่....
ถ้าจะให้ใช้ terminal ide อย่าง nano หรือ vim ก็คงจะลำบากสำหรับบางคน งั้นเรามาใช้ VSCode บน Windows เขียนโปรแกรมกันดีกว่า

เปิด VSCode ขึ้นมาแล้วติดตั้ง extension ที่ชื่อ Remote Development 
โดยใช้คีย์ลัด CTRL + Shift + X เพื่อเปิดหน้าต่างของ Extension ขึ้นมา แล้วในช่องค้นหาก็ใส่ชื่อ Remote Development และเลือก Install 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/12xjl64bky7bzah911w1.png)

หลังจากติดตั้งเสร็จแล้ว ให้กดปุ่ม F1 หรือ CTRL + Shift + P เพื่อเปิด short command ขึ้นมา จากนั้นให้พิมพ์ Remote-ssh: Connect to Host และเลือก + Add new SSH Host เพื่อเป็นการกำหนดข้อมูลของ Pi  ที่เราต้องการจะใช้งาน โดยเราสามารถใส่เป็น pi@<Ip หรือ Name> ก็ได้ แล้วกด Enter

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/k45pebks60mdku406gwa.png)

จากนั้นจะให้เลือกตำแหน่งที่จะบันทึกการตั้งค่าของ SSH ซึ่งในที่นี้จะเลือกเป็น user directory ดังภาพ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/e7oqlf3btd8qladci3tz.png)

เมื่อบันทึกเสร็จแล้ว ให้ปิด VSCode แล้วเปิดขึ้นมาให้ VSCode จะทำการเชื่อมต่อไปยัง Pi และจากนั้นจะถามเกี่ยวกับระบบปลายทางว่าเป็น OS แบบไหน ให้เลือก Linux และกด Enter

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/2z68it6mnhz62ozs5oac.png)

หากไม่ขึ้น popup ให้กด F1 และเลือก Remote-ssh: Connect to Host อีกครั้ง จะขึ้นโปรไฟล์ SSH ขึ้นมาให้เลือกไปยังโปรไฟล์ที่เพิ่มเข้าไป

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ckcnmspkt9pf87g618jt.png)

หลังจากนั้นก็จะถามรหัสผ่านสำหรับ login อีกครั้ง ก็จะเป็นอันเสร็จ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/d5l16um0hh1zsd8yitgs.png)

สำหรับวิธีใช้งาน ขั้นแรกเราก็ต้องไปสร้างโปรเจคบน pi ขึ้นมาก่อน โดยในที่นี้จะสร้างเป็นโปรเจคไว้ในโฟลเดอร์ Documents\dotnet-projects และสร้างโปรเจคแบบ Console ด้วยคำสั่ง

```
dotnet new console --name HelloWorld
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/x0u046v9ss04gignfzn4.png)

หลังจากนั้นกลับมาที่ VSCode ก็จะเจอโปรแจค ดังภาพ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/rlmo6eat4cgott135p7p.png)

จากนั้นทดลองรันโปรเจคโดยใช้ Terminal โดยใช้คีย์ลัด CTRL + Shift + ~ ก็จะมีหน้าต่าง Terminal แสดงขึ้นมา ให้เราย้ายไปใช้โฟลเดอร์ที่เก็บโปรเจคก่อน ซึ่งก็จะเหมือนกับในภาพ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/yp01bgljfqr5ls7i3ly6.png)

จากนั้นเราจะใช้คำสั่งเพื่อรันโปรเจค ดังนี้

```
dotnet run
```

ซึ่งก็จะได้ผลลัพท์แบบนี้

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xz6lpl932z0l26v4nbte.png)