請問 Ubuntu Server 22.04 啟動程序 [論壇 - 新手村]
正在瀏覽:
2 名遊客
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2022/7/27 14:06 所屬群組:
已註冊使用者 等級: 2
HP : 0 / 31
![]() |
samwhelp 寫到:Jimmy.W 寫到: 好的, 謝謝 有看到是說 initrd.img 就是載入 kernel 需要的驅動相關, 這後面再慢慢消化; 目前太多資訊.....先從大的框架概念, 後面再深入囉, thanks.
2022/7/29 15:14
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
Jimmy.W 寫到: 請參考「維基百科 / init」, 裡面有一段話如下 維基百科/init 寫到: 所以我才會在「#4」提到 所以要請您先把以前學的規則暫時忘掉,先熟悉「systemd」的操作規則。 ![]()
2022/7/29 15:15
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
Jimmy.W 寫到: ================================================================================ 在「#3」和「#4」 關於「file /sbin/init」這一段, 我要解釋的是如下
================================================================================ 關於「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
![]() |
Jimmy.W 寫到: 基本上開機流程到「/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
![]() |
samwhelp 寫到: 謝謝回覆 沒事, 我大部分都是用硬體的電路設計概念在思考軟體運行的流程 所以會一直先想知道整個大的方向, 稍微看了一下, 所以目前 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
![]() |
目前我比較沒有時間放在這上面,
因為有些議題,我都是有用到才會去探索, 或是這個論壇有人問,而我原本也有興趣的議題,只是暫時擱著沒去深究, 剛好藉著回答問題的契機,就會實際去探索深究,有心得,就會回覆在這個論壇。 我大概知道您現在想問的是什麼,也能理解您為什麼會這麼問, 不過我對Systemd還沒有到很熟悉的地步, 我知道的也只有大概,我沒有完全掌握全貌,有些細節也需要釐清, 不過我想我可以提供給您一些線索和方法,或是相關的連結,讓您可以自行去探索。 我原本還有一些想法要寫,不過目前我採取的策略,是找到時間,一次寫一點給您, 所以不見得很快就會回覆您 先簡短地回覆您,讓您知道 以上 ![]()
2022/8/1 11:26
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
# 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!" 然後執行下面指令,設定為可執行
接著就可以執行
顯示
執行下面指令,將「demo-service-start.sh」安裝到系統上, 也就是安裝到「/usr/local/bin/demo-service-start.sh」這個路徑
或是也可以執行下面指令,將「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」這個路徑
執行下面指令,確保「/usr/lib/systemd/system/demo-service-start.service」這個檔案權限為「644」
上面兩道指令,也可以改成執行一道指令如下。
註:關於放在「/usr/lib/systemd/system/」,在「#22」,有進一步的討論。 ================================================================================ ## Manpage * man systemctl * man systemctl ================================================================================ ## list-unit-files 執行
顯示 UNIT FILE STATE VENDOR PRESET demo-service-start.service disabled enabled 1 unit files listed. ================================================================================ ## cat 執行
顯示 # /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 執行
顯示 ○ demo-service-start.service - Demo Service Start Loaded: loaded (/lib/systemd/system/demo-service-start.service; disabled; vendor preset: enabled) Active: inactive (dead) ================================================================================ ## 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」
顯示 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 執行下面指令,啟用服務,也就是讓開機可以自動啟動服務
顯示
也就是會在「/etc/systemd/system/default.target.wants/」這個資料夾, 產生一個檔案「demo-service-start.service」連結到「/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」
顯示
================================================================================ 以上提供參考 報告完畢 ![]()
2022/8/1 14:35
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員一級
![]() ![]() 註冊日期:
2022/7/27 14:06 所屬群組:
已註冊使用者 等級: 2
HP : 0 / 31
![]() |
好的, 不過訊息亮太大, 需要很多時間消化, 我剛好有看到您寫的一篇
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 寫到:
2022/8/1 15:43
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
Jimmy.W 寫到: 您提到的,應該指的是這篇「如何使用「ubuntu-drivers」這個指令,來輔助安裝驅動程式套件」 Jimmy.W 寫到: 對,我個人以前也有這樣的經驗感受,不見得要使用它推薦的驅動程式。 ================================================================================ 另外我目前使用的機器,可能比較幸運,裝好「Ubuntu」後,驅動程式應該都是有支援, 所以通常系統裝好後,我也沒再去安裝「額外的驅動程式」, 因此我也沒特別常去使用「ubuntu-drivers」這個指令。 只是那時候,應該是在探索相關的議題,剛好發現到這個指令,所以做了點紀錄,知道有這樣的輔助工具可使用。 就當作參考吧 ![]()
2022/8/1 20:03
|
||||||||||
![]() |
回覆: 請問 Ubuntu Server 22.04 啟動程序 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 905
![]() |
Jimmy.W 寫到: 呵! 不用急著回覆我,反正我貼上來,就是要讓您參考,只是作個簡單指引 這需要您實際去操作,花時間去做實驗,去探索,去理解... 記得要照我上面「#17」貼的步驟,一步一步地去操作。 也許您慢慢地就會有感覺,有一天突然豁然開朗,找到您想要的答案。 不過也有可能看了我的說明,反而被我誤導, 哈,所以還是會建議您再多去對照參考其他的文章,自己實際動手去探索,找到能讓自己信服的結論。 ================================================================================ Jimmy.W 寫到: 這個目前尚未去深究,所以目前無法回覆您, 建議您可以再去閱讀上面「#17」貼的參考連結,也許您能找到些線索,進而找到答案。 還有一樣建議記得要照我上面「#17」貼的步驟,一步一步地去操作。 * man systemd.unit * man systemd.service * man systemd.target * 維基百科 / systemd / 設計 ================================================================================ Jimmy.W 寫到: * 維基百科 / 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」
您可以先執行「demo-init.sh」,先做簡單測試 就會顯示「Demo Init」這個訊息, 並且不會跳下一個「提示字元」,因為我上面的程式有下一個「sleep 1000000」,假裝是「常駐」。 這時候,您可以按下「Ctrl + c」,就會離開這隻程式。 ================================================================================ 接著「重開機」,實際來做這個小實驗 進到「Grub 選單」,應該是有多個選項, 第一個選項應該是「Ubuntu」, 我們在這個選項,按下「e」,就可以編輯這個選項, 應該可找到其中一行開頭是「linux」,類似如下
然後根據 * 維基百科 / init / 跳過 init 裡面提到,預設會執行「/sbin/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
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.