LUNARTHALE

Using RustUp inside Fedora Silverblue's Toolbox

6-November-2020


กลับมาแล้วหลังจากอู้ไปหลายเดือนเนื่องด้วยการคลาย Lockdown ที่ผ่านมาของประเทศไทย ฮาๆ ครั้งนี้เราจะมาพูดถึงในฝั่ง Linux กันบ้างนั่นก็คือ Fedora Silverblue 33 ตัวเต็มนั่นเอง ที่เพิ่งถูกปล่อยออกมาประมาณสองถึงสามสัปดาห์ที่ผ่านมา ผมเลยตัดสินใจที่จะลงแบบ Clean Install เนื่องจากเว่อรชั่นนี้มาพร้อมกับ BTRFS หรือ file system แบบใหม่ที่มีความสามารถด้าน snapshot ที่ดี ซึ่งจะทำให้สามารถ roll back หรืออะไรต่างๆได้ง่ายขึ้นมากๆ ส่วนด้าน Fedora Silverblue นั้นต่างกับ Fedora ปกติอย่างไรบ้างนั้น เดียวค่อยว่ากันอีกทีแหละกันครับ ในวันนี้เรามาโฟกัสถึงวิธีการลง rust ด้วย RustUp กันก่อนดีกว่า

Tools Version
* Rustup : rustup-init 1.22.1 (b01adbbc3 2020-07-08)
* Toolbox : 0.0.96v
เกริ่นนำยาวยืด

เนื่องด้วยปกติแล้ว เดียวนี้เวลาจะติดตั้งตัว compiler ของภาษาต่างๆ เรามักจะใช้ tool ในการจัดการเรื่องเว่อร์ชั่นเช่น nvm, venv เป็นต้น ในฝั่ง rust นั้นก็มีตัวจัดการชื่อว่า RustUp ซึ่งเราก็สามารถ ติดตั้งอย่างง่ายดายด้วยคำสั่งเดียวผ่านทาง command line ตามนี้เลย - RustUp

อ่าวแล้วทำไมถึงต้องเขียนบทความขึ้นมาหล่ะหากมันง่ายดายซะขนาดนั้น นั่นก็เพราะตัว Fedora Silverblue จะแนะนำให้ลงใน podman container ที่ถูก manage ผ่านโปรแกรมที่ชื่อ toolbox อีกที (สนใจเรียนรู้เพิ่มเติมก็กด link ได้เลย) นั่นหมายความว่าหากเราจะลง rustup นั้น ถ้าไม่ config อะไรก่อนเลยจะทำให้พวก config ต่างๆนั้นไปลงที่ $HOME ของเราบน host!!! นั่นก็จะทำให้มันไปกองๆกันใน home อยู่เหมือนเดิม กลายเป็นจะแบ่งแยกย่อยไปทำไมหล่ะ!!!!!! เซ็ง..

เตรียมการติดต้ัง

ก่อนอื่นเลยเราต้องสร้าง Toolbox ขึ้นมาก่อน หลังจากนั้นก็ต้องเริ่มจากการสร้าง folder ที่เราจะเอาพวก env, bin, src file ต่างของ rust ไปวางไว้ ผมใช้ตามนี้

[tea@lunarthale ~]$ toolbox create example1
Created container: example1
Enter with: toolbox enter example1
[tea@lunarthale ~]$ toolbox enter example1
⬢[tea@toolbox ~]$ su -

Welcome to the Toolbox; a container where you can install and run
all your tools.

 - Use DNF in the usual manner to install command line tools.
 - To create a new tools container, run 'toolbox create'.

For more information, see the documentation.

⬢[root@toolbox ~]# mkdir /rustbox
⬢[root@toolbox ~]# chown 1000:1000 /rustbox #Change owner to default account
[root@toolbox ~]# logout
เริ่มการติดตั้ง Rust ด้วย RustUp

เริ่มโดยการ Download rust ลงมาก่อนแหละ save เป็นไฟล์ไว้โดยใช้ user account หลังจากนั้นทำการ export env สองตัวด้วยกันนั่นก็คือ $RUSTUP_HOME กับ $CARGO_HOME ผมใช้เป็น /rustbox/rustup กับ /rustboxt/cargo

⬢[tea@toolbox rustbox]$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh
⬢[tea@toolbox rustbox]$ chmod +x rustup.sh 
⬢[tea@toolbox rustbox]$ export RUSTUP_HOME=/rustbox/rustup
⬢[tea@toolbox rustbox]$ export CARGO_HOME=/rustbox/cargo
⬢[tea@toolbox rustbox]$ ./rustup.sh --no-modify-path
						.
						.
						.
  stable installed - rustc 1.47.0 (18bf6b4f0 2020-10-07)


Rust is installed now. Great!

To get started you need Cargo's bin directory (/rustbox/cargo/bin) in your PATH
environment variable.

To configure your current shell run source /rustbox/cargo/env

ลงเรียบร้อย เริ่มใช้งานได้เลยเพียงแค่สั่ง source /rustbox/cargo/env

Source enviroment ผ่าน profile.d

ในการที่จะไม่ต้องมาคอยต้องนั่ง source /rustbox/cargo/env ทุกครั้งให้ยุ่งยาก ให้เปลี่ยนเป็น root แล้วไปสร้างไฟล์ไว้ใน /etc/profile.d/ เอาไว้ให้เมื่อ toolbox enter แล้วสามารถใช้คำสั่ง rustup, rustfmt, cargo ได้ทันที

⬢[root@toolbox ~]# cat /etc/profile.d/source-rust.sh 
# source rust to initialise 
export RUSTUP_HOME=/rustbox/rustup
export CARGO_HOME=/rustbox/cargo
source /rustbox/cargo/env

เท่านี้ก็เป็นอันเรียบร้อย เราก็จะมี toolbox สำหรับไว้ใช้ในการพัฒนา rust ได้โดยไม่ไปเลอะ $HOME directory แถมยังถูก isolated ออกจาก host system ของเราอีกด้วย

#UPDATED หากเจอ Error ขึ้นประมาณนี้ error: linker ``cc`` not found แสดงว่ายังไม่ได้ลง GCC ไว้ใน toolbox ก็จัดการลงซะนะจะได้จบๆเรื่อง T_T

  • ป.ล. ถ้าอยากใช้ ide ในการพัฒนา ต้องลง ide ไว้ใน toolbox เพื่อให้ ide สามารถหา rust binary ที่เราลงไว้ได้

For questions and comments, please send it to my public mailing list. Thank you.