請問 Ubuntu Server 22.04 啟動程序 [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

« 1 (2) 3 »


回覆: 請問 Ubuntu Server 22.04 啟動程序
會員一級
註冊日期:
2022/7/27 14:06
所屬群組:
已註冊使用者
等級: 2
HP : 0 / 31
MP : 4 / 106
EXP: 25
離線
samwhelp 寫到:
Jimmy.W 寫到:
謝謝回覆, 看來很多訊息, 您說的部份會在花時間 study一下

大致上,開機過程,執行到「/sbin/init」這一個階段,這您應該也理解
==> 這邊還不是很清楚, 目前頭腦理解到的只有在 MBR之後, 選擇到 Linux之後, 就會進入到 /boot下的 vmlinuz; 在 /boot 下兩個主要檔案,

一個是 vmlinuz, 一個是 initrd.img 不確定在啟動時候會指向以哪個為主




關於「vmlinuz」,我沒去深究,我並不懂。

關於「initrd.img」,若您有興趣想要探索的話,

可以參考我在另一個討論串「#5 - 回覆: 夾帶 microcode 的 initrd 解法」提到的

透過「initramfs-extract」將「/boot/initrd.img」解開

您就可以「探索」其中的「init」,這個檔案就是「Shell Script」。

您可以直接用純文字編輯打開它,並且閱讀它裡面的內容


待續...


好的, 謝謝
有看到是說 initrd.img 就是載入 kernel 需要的驅動相關, 這後面再慢慢消化; 目前太多資訊.....先從大的框架概念, 後面再深入囉, thanks.

2022/7/29 15:14
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
Jimmy.W 寫到:
...

https://www.796t.com/article.php?id=237300 在這一篇文章提及
核心被載入後,第一個執行的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案 ==> 所以對應到 Ubuntu是哪一個檔案?

...




請參考「維基百科 / init」,

裡面有一段話如下

維基百科/init 寫到:
...

目前絕大多數Linux發行版已經基於新的systemd,systemd一般不再使用/etc/inittab檔案

...



所以我才會在「#4」提到

所以要請您先把以前學的規則暫時忘掉,先熟悉「systemd」的操作規則。


2022/7/29 15:15
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
Jimmy.W 寫到:

...

https://www.796t.com/article.php?id=237300 在這一篇文章提及
核心被載入後,第一個執行的程式便是/sbin/init,該檔案會讀取/etc/inittab檔案 ==> 所以對應到 Ubuntu是哪一個檔案?
==> 所以您解釋的是這一段的過程嗎?
file /sbin/init --> /lin/systemd/systemd -->
/lib/systemd/systemd: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=968ffe3f6622fa1919d1f1f119041e469ae98694, for GNU/Linux 3.2.0, stripped ==> 這邊就看不懂是跳到哪裡去 >_<


因為目前很多訊息片段要串起來, 也要邏輯性判斷, 才能比較正確理解


================================================================================

在「#3」和「#4

關於「file /sbin/init」這一段,

我要解釋的是如下



關於「/sbin/init」只是一個「Symbolic Link」到「/lib/systemd/systemd」

所以執行「/sbin/init」,其實就是執行「/lib/systemd/systemd」




================================================================================

關於「Symbolic Link」,可以閱讀「鳥哥的私房菜 / 第七章、Linux 磁碟與檔案系統管理 / Symbolic Link (符號連結,亦即是捷徑)

或是使用關鍵字「symbolic link」查詢更多的參考文章來閱讀。


================================================================================

關於「file /sbin/init」

這裡的「file」,是一個指令,

請執行「man file」來閱讀相關的用法。


* 鳥哥私房菜 / 第六章、Linux 檔案與目錄管理 / 6.4.4 觀察檔案類型:file
* 維基百科 / file (命令)


================================================================================

2022/7/29 15:38
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
Jimmy.W 寫到:
...

1.不確定自己這樣的說法是否正確,因為以系統概念應該是 sequencial的方式, 即便是 concurrent, 也應該能夠 trace back
2.先前 /boot 後載入 kernel,

https://dywang.csie.cyut.edu.tw/dywang/linuxSystem/node81.html
這邊文章有提到 載入後第一支程式為 init, 所以 PID是 1這個說法也合理

但是在目前的 Ubuntu 是不是就是 /sbin/init 為 PID的 1
不確定是不是這樣理解, 因為 /sbin/init 是二進位, 所以不太知道要怎麼去 trace back回去, 接下來的程序 call ......大概這就是目前我開始卡住的地方

...




基本上開機流程到「/sbin/init」這一段,概念上是一致的。

只是「/sbin/init」改用「systemd」這套系統。

所以我在「#4」有提到

後續的流程就會遵循「systemd」設計的規範,

所以要請您先研讀「#4」提到的連結,

來從中理解相關的規則,一窺大概。

================================================================================

若是您要trace「/sbin/init」,您可能需要去研讀「systemd」的原始碼,

這部份我也沒去探索過,所以我也不曉得它其中的實作細節,目前時間和能力有限,歹勢拉 orz...

================================================================================

* 維基百科 / init

================================================================================

以上提供參考,報告完畢



2022/7/29 16:06
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員一級
註冊日期:
2022/7/27 14:06
所屬群組:
已註冊使用者
等級: 2
HP : 0 / 31
MP : 4 / 106
EXP: 25
離線
samwhelp 寫到:
收到,我覺得我好像讓您更混亂了。

整個開機流程,我也不是每個階段,都有很完整的了解,

我只有理解大概的脈落,

有些階段我也還暫時擱著,還沒有深入去探索。

所以我也沒有完整的論述,可以回覆您,

就算我知道,這要寫起來,可能是一大串。

不過,您別急,

以我自己的經驗是從一些片段,一些片段理解起,

慢慢就會拼湊出全貌。

所以我會建議您先去看我在「#4」列的參考連結,

也許當您理解那些連結所講的內容,您的疑問,也許就自然減少了。



下面回覆,我以我了解到的,針對你的疑問來回覆。

我會分段回覆,所以待續...


謝謝回覆

沒事, 我大部分都是用硬體的電路設計概念在思考軟體運行的流程
所以會一直先想知道整個大的方向, 稍微看了一下, 所以目前 Ubuntu是採用 systemd的方式, 在這網頁看到這一段話https://manpages.ubuntu.com/manpages/bionic/zh_TW/man1/systemd.1.html

"爲了與傳統的 SysV 兼容,如果將 systemd 以 init 名稱啓動,並且"PID≠1",那麼它將執行 telinit
命令並將所有命令行參數原封不動的傳遞過去。 這樣對於普通的登陸會話來說,無論是調用 init 還
是調用 telinit 都是等價的。 詳見 telinit(8) 手冊。"
我查詢一下, 如果是 /usr/sbin/telinit 就是會到 /bin/systemctl

因為沒有看程式內容, 所以就只能先猜測個大概, 看看系統邏輯性正確與否, 看來還需要花更多時間梳理, 所以不曉得是一次可以 call 所有的 target 還是就是先到 runlevel 3的 multi-user target, 然後再去 call 其它的 target 或是?? 這一層一層概念剝開就比較花時間..還有個內核引導選項, 也不了解

2022/8/1 10:00
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
目前我比較沒有時間放在這上面,

因為有些議題,我都是有用到才會去探索,

或是這個論壇有人問,而我原本也有興趣的議題,只是暫時擱著沒去深究,

剛好藉著回答問題的契機,就會實際去探索深究,有心得,就會回覆在這個論壇。

我大概知道您現在想問的是什麼,也能理解您為什麼會這麼問,

不過我對Systemd還沒有到很熟悉的地步,

我知道的也只有大概,我沒有完全掌握全貌,有些細節也需要釐清,

不過我想我可以提供給您一些線索和方法,或是相關的連結,讓您可以自行去探索。

我原本還有一些想法要寫,不過目前我採取的策略,是找到時間,一次寫一點給您,

所以不見得很快就會回覆您

先簡短地回覆您,讓您知道

以上


2022/8/1 11:26
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
# Demo Service Start

================================================================================

## 參考文章

我把這個討論串的「#4 回覆
和另一篇討論串的「#3 回覆
裡面所貼的參考連結,將其中幾個貼過來如下

* Linux 建立自訂 Systemd 服務教學與範例
* Systemd 入門教程:實戰篇
* 使用 Systemd 開機自動執行腳本,棄用 rc.local

然後改寫了一個簡單的範例放在「GitHub」上,也許能讓您有個入門,讓您有個探索的起點。

簡易說明如下,其他的細節,您可能需要再去網路找相關資料,或是對照閱讀上面參考連結的內容。


================================================================================

## 相關檔案路徑

* /usr/local/bin/demo-service-start.sh
* /usr/lib/systemd/system/demo-service-start.service
* /var/log/syslog

================================================================================

## install script

先產生一個「Shell Script」,檔案名稱是「demo-service-start.sh

內容如下


#!/usr/bin/env bash

echo "This is demo sevice start message!"




然後執行下面指令,設定為可執行


chmod 755 ./demo-service-start.sh



接著就可以執行


./demo-service-start.sh



顯示


This is demo sevice start message!



執行下面指令,將「demo-service-start.sh」安裝到系統上,

也就是安裝到「/usr/local/bin/demo-service-start.sh」這個路徑


sudo cp ./demo-service-start.sh /usr/local/bin/demo-service-start.sh



或是也可以執行下面指令,將「demo-service-start.sh」安裝到系統上


sudo install -Dm755 ./demo-service-start.sh /usr/local/bin/demo-service-start.sh



這樣我們就可直接執行「demo-service-start.sh」

================================================================================

## instal service

先產生一個檔案,檔案名稱是「demo-service-start.service

內容如下


[Unit]
Description=Demo Service Start

[Service]
Type=simple
ExecStart=/usr/local/bin/demo-service-start.sh

[Install]
WantedBy=default.target




執行下面指令,將「demo-service-start.service」安裝到系統上,

也就是安裝到「/usr/lib/systemd/system/demo-service-start.service」這個路徑


sudo cp ./demo-service-start.service /usr/lib/systemd/system/demo-service-start.service



執行下面指令,確保「/usr/lib/systemd/system/demo-service-start.service」這個檔案權限為「644」


sudo chmod 644 /usr/lib/systemd/system/demo-service-start.service



上面兩道指令,也可以改成執行一道指令如下。


sudo install -Dm644 demo-service-start.service /usr/lib/systemd/system/demo-service-start.service



註:關於放在「/usr/lib/systemd/system/」,在「#22」,有進一步的討論。

================================================================================

## Manpage

* man systemctl
* man systemctl

================================================================================

## list-unit-files

執行


systemctl list-unit-files demo-*



顯示


UNIT FILE                  STATE    VENDOR PRESET
demo-service-start.service disabled enabled      

1 unit files listed.



================================================================================

## cat

執行


systemctl cat demo-service-start



顯示


# /lib/systemd/system/demo-service-start.service
[Unit]
Description=Demo Service Start

[Service]
Type=simple
ExecStart=/usr/local/bin/demo-service-start.sh

[Install]
WantedBy=default.target



================================================================================

## status

執行


systemctl status demo-service-start



顯示


○ demo-service-start.service - Demo Service Start
     Loaded: loaded (/lib/systemd/system/demo-service-start.service; disabled; vendor preset: enabled)
     Active: inactive (dead)



================================================================================

## start

執行下面指令,啟動服務


sudo systemctl start demo-service-start



執行下面指令,觀看服務的狀態


systemctl status demo-service-start



顯示


○ demo-service-start.service - Demo Service Start
     Loaded: loaded (/lib/systemd/system/demo-service-start.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

Aug 04 11:59:23 sam-anywhere systemd[1]: Started Demo Service Start.
Aug 04 11:59:23 sam-anywhere demo-service-start.sh[12228]: This is demo sevice start message!
Aug 04 11:59:23 sam-anywhere systemd[1]: demo-service-start.service: Deactivated successfully.




執行下面指令,使用「demo」當關鍵字,來查詢「/var/log/syslog」


grep -i -n 'demo' /var/log/syslog



顯示


46210:Aug  4 11:59:23 sam-anywhere systemd[1]: Started Demo Service Start.
46211:Aug  4 11:59:23 sam-anywhere demo-service-start.sh[12228]: This is demo sevice start message!
46212:Aug  4 11:59:23 sam-anywhere systemd[1]: demo-service-start.service: Deactivated successfully.



您也可以執行「less /var/log/syslog」,
然後使用「less」的機制來查詢,先按下「/」,然後再輸入「demo」查詢。

================================================================================

## enable

執行下面指令,啟用服務,也就是讓開機可以自動啟動服務


sudo systemctl enable demo-service-start



顯示


Created symlink /etc/systemd/system/default.target.wants/demo-service-start.service → /lib/systemd/system/demo-service-start.service.



也就是會在「/etc/systemd/system/default.target.wants/」這個資料夾,

產生一個檔案「demo-service-start.service」連結到「/lib/systemd/system/demo-service-start.service」。


可以執行下面指令,來觀察


ls -1 /etc/systemd/system/default.target.wants/



顯示


demo-service-start.service



執行


file /etc/systemd/system/default.target.wants/demo-service-start.service



顯示


/etc/systemd/system/default.target.wants/demo-service-start.service: symbolic link to /lib/systemd/system/demo-service-start.service



請對照上面的「demo-service-start.service」這個檔案內容,

其中有一段如下。


[Install]
WantedBy=default.target



可以看到「default.target」,對應到「/etc/systemd/system/default.target.wants」


================================================================================

## wants dir

執行下面指令,觀看在「/etc/systemd/system/」這個資料夾底下,有那些副檔名是「.wants」


ls -d -1 /etc/systemd/system/*.wants



顯示


/etc/systemd/system/bluetooth.target.wants
/etc/systemd/system/cloud-final.service.wants
/etc/systemd/system/default.target.wants
/etc/systemd/system/display-manager.service.wants
/etc/systemd/system/emergency.target.wants
/etc/systemd/system/final.target.wants
/etc/systemd/system/getty.target.wants
/etc/systemd/system/graphical.target.wants
/etc/systemd/system/multi-user.target.wants
/etc/systemd/system/network-online.target.wants
/etc/systemd/system/network.target.wants
/etc/systemd/system/oem-config.service.wants
/etc/systemd/system/paths.target.wants
/etc/systemd/system/printer.target.wants
/etc/systemd/system/rescue.target.wants
/etc/systemd/system/sleep.target.wants
/etc/systemd/system/sockets.target.wants
/etc/systemd/system/sysinit.target.wants
/etc/systemd/system/timers.target.wants



================================================================================

以上提供參考

報告完畢


2022/8/1 14:35
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員一級
註冊日期:
2022/7/27 14:06
所屬群組:
已註冊使用者
等級: 2
HP : 0 / 31
MP : 4 / 106
EXP: 25
離線
好的, 不過訊息亮太大, 需要很多時間消化, 我剛好有看到您寫的一篇
Ubuntu-drivers devices 安裝, 先前有針對自己的 NB Aspire的進行, 不過後來發現用 recommenation的安裝不一定會比較好, 這是個人使用後的感覺

看完部分訊息, 覺得您貼的對自己而言很多太深入, 所以還是先將基礎的概念轉換一下, 大概能理解目前 systemd的 PID=1 就是進行 systemd.init , 然後可以看出其 systemctl 的整個樹狀結構, 所以還是要再弄清楚每個 slice, unit, scope, service等明確定義

可以看到「default.target」,對應到「/etc/systemd/system/default.target.wants」 ==> 另外這個 target也是目前在釐清的想法, 應該是 PID=1 後會跟著執行的部分


samwhelp 寫到:
# Demo Service Start

================================================================================

## 參考文章

我把這個討論串的「#4 回覆
和另一篇討論串的「#3 回覆
裡面所貼的參考連結,將其中幾個貼過來如下

* Linux 建立自訂 Systemd 服務教學與範例
* Systemd 入門教程:實戰篇
* 使用 Systemd 開機自動執行腳本,棄用 rc.local

然後改寫了一個簡單的範例放在「GitHub」上,也許能讓您有個入門,讓您有個探索的起點。

簡易說明如下,其他的細節,您可能需要再去網路找相關資料,或是對照閱讀上面參考連結的內容。


================================================================================

## 相關檔案路徑

* /usr/local/bin/demo-service-start.sh
* /etc/systemd/system/demo-service-start.service
* /var/log/syslog

================================================================================

## install script

先產生一個「Shell Script」,檔案名稱是「demo-service-start.sh

內容如下


#!/usr/bin/env bash

echo "This is demo sevice start message!"




然後執行下面指令,設定為可執行


chmod 755 ./demo-service-start.sh



接著就可以執行


./demo-service-start.sh



顯示


This is demo sevice start message!



執行下面指令,將「demo-service-start.sh」安裝到系統上,

也就是安裝到「/usr/local/bin/demo-service-start.sh」這個路徑


sudo cp ./demo-service-start.sh /usr/local/bin/demo-service-start.sh



或是也可以執行下面指令,將「demo-service-start.sh」安裝到系統上


sudo install -Dm755 ./demo-service-start.sh /usr/local/bin/demo-service-start.sh



這樣我們就可直接執行「demo-service-start.sh」

================================================================================

## instal service

先產生一個檔案,檔案名稱是「demo-service-start.service

內容如下


[Unit]
Description=Demo Service Start

[Service]
Type=simple
ExecStart=/usr/local/bin/demo-service-start.sh

[Install]
WantedBy=default.target




執行下面指令,將「demo-service-start.service」安裝到系統上,

也就是安裝到「/etc/systemd/system/demo-service-start.service」這個路徑


sudo cp ./demo-service-start.service /etc/systemd/system/demo-service-start.service



執行下面指令,確保「/etc/systemd/system/demo-service-start.service」這個檔案權限為「644」


sudo chmod 644 /etc/systemd/system/demo-service-start.service



上面兩道指令,也可以改成執行一道指令如下。


sudo install -Dm644 demo-service-start.service /etc/systemd/system/demo-service-start.service



================================================================================

## Manpage

* man systemctl
* man systemctl

================================================================================

## list-unit-files

執行


systemctl list-unit-files demo-*



顯示


UNIT FILE                  STATE    VENDOR PRESET
demo-service-start.service disabled enabled      

1 unit files listed.



================================================================================

## cat

執行


systemctl cat demo-service-start



顯示


# /etc/systemd/system/demo-service-start.service
[Unit]
Description=Demo Service Start

[Service]
Type=simple
ExecStart=/usr/local/bin/demo-service-start.sh

[Install]
WantedBy=default.target



================================================================================

## status

執行


systemctl status demo-service-start



顯示


○ demo-service-start.service - Demo Service Start
     Loaded: loaded (/etc/systemd/system/demo-service-start.service; disabled; vendor preset: enabled)
     Active: inactive (dead)



================================================================================

## start

執行下面指令,啟動服務


sudo systemctl start demo-service-start



執行下面指令,觀看服務的狀態


systemctl status demo-service-start



顯示


○ demo-service-start.service - Demo Service Start
     Loaded: loaded (/etc/systemd/system/demo-service-start.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

Aug 01 12:16:03 sam-anywhere systemd[1]: Started Demo Service Start.
Aug 01 12:16:03 sam-anywhere demo-service-start.sh[11111]: This is demo sevice start message!
Aug 01 12:16:03 sam-anywhere systemd[1]: demo-service-start.service: Deactivated successfully.




執行下面指令,使用「demo」當關鍵字,來查詢「/var/log/syslog」


grep -i -n 'demo' /var/log/syslog



顯示


9816:Aug  1 12:16:03 sam-anywhere systemd[1]: Started Demo Service Start.
9817:Aug  1 12:16:03 sam-anywhere demo-service-start.sh[11111]: This is demo sevice start message!
9818:Aug  1 12:16:03 sam-anywhere systemd[1]: demo-service-start.service: Deactivated successfully.



您也可以執行「less /var/log/syslog」,
然後使用「less」的機制來查詢,先按下「/」,然後再輸入「demo」查詢。

================================================================================

## enable

執行下面指令,啟用服務,也就是讓開機可以自動啟動服務


sudo systemctl enable demo-service-start



顯示


Created symlink /etc/systemd/system/default.target.wants/demo-service-start.service → /etc/systemd/system/demo-service-start.service.



也就是會在「/etc/systemd/system/default.target.wants/」這個資料夾,

產生一個檔案「demo-service-start.service」連結到「/etc/systemd/system/demo-service-start.service」。


可以執行下面指令,來觀察


ls -1 /etc/systemd/system/default.target.wants/



顯示


demo-service-start.service



執行


file /etc/systemd/system/default.target.wants/demo-service-start.service



顯示


/etc/systemd/system/default.target.wants/demo-service-start.service: symbolic link to /etc/systemd/system/demo-service-start.service



請對照上面的「demo-service-start.service」這個檔案內容,

其中有一段如下。


[Install]
WantedBy=default.target



可以看到「default.target」,對應到「/etc/systemd/system/default.target.wants」


================================================================================

## wants dir

執行下面指令,觀看在「/etc/systemd/system/」這個資料夾底下,有那些副檔名是「.wants」


ls -d -1 /etc/systemd/system/*.wants



顯示


/etc/systemd/system/bluetooth.target.wants
/etc/systemd/system/cloud-final.service.wants
/etc/systemd/system/default.target.wants
/etc/systemd/system/display-manager.service.wants
/etc/systemd/system/emergency.target.wants
/etc/systemd/system/final.target.wants
/etc/systemd/system/getty.target.wants
/etc/systemd/system/graphical.target.wants
/etc/systemd/system/multi-user.target.wants
/etc/systemd/system/network-online.target.wants
/etc/systemd/system/network.target.wants
/etc/systemd/system/oem-config.service.wants
/etc/systemd/system/paths.target.wants
/etc/systemd/system/printer.target.wants
/etc/systemd/system/rescue.target.wants
/etc/systemd/system/sleep.target.wants
/etc/systemd/system/sockets.target.wants
/etc/systemd/system/sysinit.target.wants
/etc/systemd/system/timers.target.wants



================================================================================

以上提供參考

報告完畢


2022/8/1 15:43
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
Jimmy.W 寫到:
...

我剛好有看到您寫的一篇
Ubuntu-drivers devices 安裝,

...



您提到的,應該指的是這篇「如何使用「ubuntu-drivers」這個指令,來輔助安裝驅動程式套件

Jimmy.W 寫到:
...

我剛好有看到您寫的一篇Ubuntu-drivers devices 安裝,
先前有針對自己的 NB Aspire的進行,
不過後來發現用 recommenation的安裝不一定會比較好,
這是個人使用後的感覺

...



對,我個人以前也有這樣的經驗感受,不見得要使用它推薦的驅動程式。

================================================================================

另外我目前使用的機器,可能比較幸運,裝好「Ubuntu」後,驅動程式應該都是有支援,

所以通常系統裝好後,我也沒再去安裝「額外的驅動程式」,

因此我也沒特別常去使用「ubuntu-drivers」這個指令。

只是那時候,應該是在探索相關的議題,剛好發現到這個指令,所以做了點紀錄,知道有這樣的輔助工具可使用。

就當作參考吧


2022/8/1 20:03
應用擴展 工具箱
回覆: 請問 Ubuntu Server 22.04 啟動程序
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30224
EXP: 23
離線
Jimmy.W 寫到:
好的, 不過訊息量太大, 需要很多時間消化

...



呵! 不用急著回覆我,反正我貼上來,就是要讓您參考,只是作個簡單指引

這需要您實際去操作,花時間去做實驗,去探索,去理解...

記得要照我上面「#17」貼的步驟,一步一步地去操作。

也許您慢慢地就會有感覺,有一天突然豁然開朗,找到您想要的答案。

不過也有可能看了我的說明,反而被我誤導,

哈,所以還是會建議您再多去對照參考其他的文章,自己實際動手去探索,找到能讓自己信服的結論。

================================================================================

Jimmy.W 寫到:
...

可以看到「default.target」,對應到「/etc/systemd/system/default.target.wants」 ==> 另外這個 target也是目前在釐清的想法, 應該是 PID=1 後會跟著執行的部分

...



這個目前尚未去深究,所以目前無法回覆您,

建議您可以再去閱讀上面「#17」貼的參考連結,也許您能找到些線索,進而找到答案。

還有一樣建議記得要照我上面「#17」貼的步驟,一步一步地去操作。

* man systemd.unit
* man systemd.service
* man systemd.target
* 維基百科 / systemd / 設計

================================================================================


Jimmy.W 寫到:
...

看完部分訊息, 覺得您貼的對自己而言很多太深入, 所以還是先將基礎的概念轉換一下, 大概能理解目前 systemd的 PID=1 就是進行 systemd.init , 然後可以看出其 systemctl 的整個樹狀結構, 所以還是要再弄清楚每個 slice, unit, scope, service等明確定義

可以看到「default.target」,對應到「/etc/systemd/system/default.target.wants」 ==> 另外這個 target也是目前在釐清的想法, 應該是 PID=1 後會跟著執行的部分

...


* 維基百科 / init
* 維基百科 / systemd

我用我理解到的模型來說明,我用我的詞彙來說明,不見得正確,提供您參考

1. 當開機過程,其中一個階段會執行到「/sbin/init」這個程式。
2. 而「/sbin/init」執行的過程中,會根據一些設定檔,根據它自己設計的規則,來呼叫更多的「Service」。
3. 當開完機後,「/sbin/init」會常駐,您可以透過「systemctl」這個指令,來跟它溝通。

================================================================================

換個方式來解釋

假想您今天要自己撰寫一個「/sbin/init」這個程式,

以下我們來做個小實驗。

我們先來寫個小程式,「demo-init.sh」,內容如下


#!/bin/sh

echo 'Demo Init'


sleep 1000000




執行下面指令,將它安裝到「/usr/local/bin/demo-init.sh」


sudo install -Dm755 ./demo-init.sh /usr/local/bin/demo-init.sh



您可以先執行「demo-init.sh」,先做簡單測試

就會顯示「Demo Init」這個訊息,

並且不會跳下一個「提示字元」,因為我上面的程式有下一個「sleep 1000000」,假裝是「常駐」。

這時候,您可以按下「Ctrl + c」,就會離開這隻程式。

================================================================================

接著「重開機」,實際來做這個小實驗

進到「Grub 選單」,應該是有多個選項,

第一個選項應該是「Ubuntu」,

我們在這個選項,按下「e」,就可以編輯這個選項,

應該可找到其中一行開頭是「linux」,類似如下


linux /boot/vmlinuz-5.15.0-43-generic root=UUID=5097b1cb-ca75-4a5b-8518-58dc9ab6d845 ro quiet splash



然後根據

* 維基百科 / init / 跳過 init

裡面提到,預設會執行「/sbin/init」,

但是我們可以改成執行其他的程式,這個實驗改執行「/usr/local/bin/demo-init.sh」

將上面剛剛找到的那一行,改成如下


linux /boot/vmlinuz-5.15.0-43-generic root=UUID=5097b1cb-ca75-4a5b-8518-58dc9ab6d845 ro quiet splash init=/usr/local/bin/demo-init.sh



也就是在後面加上「init=/usr/local/bin/demo-init.sh」,

這時候我們可以按下「Ctrl + x」,就會執行剛剛所作的改變,接著開機。

進到開機流程,你就會看到「Demo Init」,然後停在那。

================================================================================

以上這個小實驗,提供您參考,也許有機會能讓您比較有感覺,也許能讓您稍微理解相關的流程。

另外,也建議您能實際操作「#17」,提到的操作步驟,
因為這部份的概念,跟我未來要針對您在之前另外的討論串,我的回覆會有相關。



================================================================================

## grub 相關筆記

* grub 探索筆記

## grub 相關討論

* #21 - 回覆: ACFS 22.04 LTS 桌面版
* #24 - 回覆: 如何設定雙系統開機選項
* #6 - 回覆: ubuntu 20.04.3 Desktop(64bit)安裝完後,開機都要20分鐘上下才能登入系統

================================================================================

2022/8/1 20:09
應用擴展 工具箱

« 1 (2) 3 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.