導航:首頁 > 源碼編譯 > networkmanager源碼

networkmanager源碼

發布時間:2024-09-17 23:47:41

❶ 如何編寫 Systemd 服務文件

一種以 .service 結尾的單元(unit)配置文件,用於控制由 systemd 控制或監視的進程。簡單說,用於後台以守護精靈(daemon)的形式運行程序。
編寫 Systemd service
基本結構
Systemd 服務的內容主要分為三個部分,控制單元(unit)的定義、服務(service)的定義、以及安裝部分。
和 SysV init 腳本的差異
過去,*nix 服務(守護精靈)都是用 SysV 啟動腳本啟動的。SysV 啟動腳本就是 Bash 腳本,通常在 /etc/init.d 目錄下,可以被一些標准參數如 start,stop,restart 等調用。啟動該腳本通常意味著啟動一個後台守護精靈(daemon)。shell 腳本常見的缺點就是,慢、可讀性不強、太詳細又很傲嬌。雖然它們很靈活(畢竟那就是代碼呀),但是有些事只用腳本做還是顯得太困難了,比如安排並列執行、正確監視進程,或者配置詳細執行環境。
SysV 啟動腳本還有一個硬傷就是,臃腫,重復代碼太多。因為上述的「標准參數」必須要靠各個腳本來實現,而且各個腳本之間的實現都差不多(根本就是從一個 skeleton 骨架來的)。而 Systemd 則進行了統一實現,也就是說在 Systemd service 中完全就不需要、也看不到這部分內容。這使得 Systemd 服務非常簡明易讀,例如 NetworkManager 這一重量級程序的服務,算上注釋一共才有 19 行。而它相應的 SysV 啟動腳本頭 100 行連標准參數都沒實現完。
Systemd 兼容 Sysv 啟動腳本,這也是為什麼這么久我們仍然需要一個 systemd-sysvinit 軟體包的原因。但是根據以上理由,最好針對所有您安裝的守護精靈都使用原生 Systemd 服務來啟動。另外,Systemd 服務可無縫用於所有使用 Systemd 的發行版,意思是 Arch 下編寫的腳本拿過來依然能夠使用。
通常來說,上游應該在發布源代碼的同時發布 Systemd 服務,但如果沒發布,你可以對照本教學來為它們寫一個並貢獻給它們。
Systemd 語法
Systemd 語法和 .desktop 文件的語法比較像,也比較類似 Windows 下的 .ini 文件,因此無論對於打包者還是最終用戶都是非常容易上手的。
主要格式請見下面的小例子,這里需要說明三點:
Systemd 單元文件中的以 「#」 開頭的行後面的內容會被認為是注釋
Systemd 下的布爾值,1、yes、on、true 都是開啟,0、no、off、false 都是關閉。註:
僅限於 Systemd 文件,比如:
RemainOnExit=yes
並不適用於該文件中嵌入的 shell 語句,比如:
ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
這里的 yes 就不能替換。因為等號後面是一條嵌入的 shell 語句。
Systemd 下的時間單位默認是秒,所以要用毫秒(ms)分鍾(m)等請顯式說明。
一個小例子
NetworkManager 的 Systemd service:
[Unit]
Description=Network Manager
After=syslog.target
Wants=remote-fs.target network.target
[Service]
Type=dbus
BusName=org.freedesktop.NetworkManager
ExecStart=/usr/sbin/NetworkManager --no-daemon
EnvironmentFile=/etc/sysconfig/network/config
ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
# Suppress stderr to eliminate plicated messages in syslog. NM calls openlog()
# with LOG_PERROR when run in foreground. But systemd redirects stderr to
# syslog by default, which results in logging each message twice.
StandardError=null
[Install]
WantedBy=multi-user.target
Also=NetworkManager-wait-online.service
以下我們以編寫 He.net IPv6 單元文件為例。
定義控制單元 [Unit]
在 Systemd 中,所有引導過程中 Systemd 要控制的東西都是一個單元。Systemd 單元類型有:
系統服務
套接字(socket)
設備
掛載點
自動掛載點
SWAP 文件
分區
啟動對象(startup target)
文件系統路徑
定時器
簡單說,Systemd 把 *nix 里那些分散開發因此宏觀看變成一團雜碎的東西重新統一命名了。單元名就是你寫的這個 .service 文件的名稱。但不只有 .service 後綴的文件才可以是一個單元,單元還可以有 .target, .path 等後綴,具體可以去 /usr/lib/systemd/system 下了解。但那種後綴要麼由 Systemd 上游開發者寫好隨 systemd 軟體包分發,要麼由我們的 Base:system 團隊添加,一般用戶是不太需要寫其它後綴的控制單元的。
我們先要聲明我們在定義控制單元:
[Unit]
單元名稱就不用寫了,我們要寫一條單元描述:
[Unit]
Description=Daemon to start He.net IPv6
下面我們要講解一下 Systemd 是如何控制各個單元之間的關系的。它和 RPM 的 specfile 的依賴關系控制的語法非常相似(畢竟都是紅帽一家的):
Requires: 這個單元啟動了,那麼它「需要」的單元也會被啟動; 它「需要」的單元被停止了,它自己也活不了。但是請注意,這個設定並不能控制某單元與它「需要」的單元的啟動順序(啟動順序是另外控制的),即 Systemd 不是先啟動 Requires 再啟動本單元,而是在本單元被激活時,並行啟動兩者。於是會產生爭分奪秒的問題,如果 Requires 先啟動成功,那麼皆大歡喜; 如果 Requires 啟動得慢,那本單元就會失敗(Systemd 沒有自動重試)。所以為了系統的健壯性,不建議使用這個標記,而建議使用 Wants 標記。可以使用多個 Requires。
RequiresOverridable:跟 Requires 很像。但是如果這條服務是由用戶手動啟動的,那麼 RequiresOverridable 後面的服務即使啟動不成功也不報錯。跟 Requires 比增加了一定容錯性,但是你要確定你的服務是有等待功能的。另外,如果不由用戶手動啟動而是隨系統開機啟動,那麼依然會有 Requires 面臨的問題。
Requisite:強勢版本的 Requires。要是這里需要的服務啟動不成功,那本單元文件不管能不能檢測等不能等待都立刻就會失敗。
Wants:推薦使用。本單元啟動了,它「想要」的單元也會被啟動。但是啟動不成功,對本單元沒有影響。
Conflicts:一個單元的啟動會停止與它「沖突」的單元,反之亦然。注意這里和後面的啟動順序是「正交」的:
兩個相互沖突的單元被同時啟動,要麼兩個都啟動不了(兩者都是第三個單元的 Requires),要麼啟動一個(有一個是第三個單元的 Requires,另一個不是),不是 Requires 的那個會被停止。要是兩者都不是任何一個單元的 Requires,那麼 Conflicts 別的那個單元優先啟動,被 Conflicts 的後啟動,要是互相寫了,那麼兩個都啟動不了。
OnFailure:很明顯,如果本單元失敗了,那麼啟動什麼單元作為折衷。
好了,現在我們來想像一下,我們的單元(Ipv6 隧道)應該想要什麼呢?很顯然是一個連通著的網路。有一個 Systemd 默認提供的對象叫做 network-online.target(默認的 target 列表可見 systemd.special,必看,因為你大多數時候 Wants 的都是一個固定的系統狀態而不是其它 systemd 服務),正正好好能夠提供我們需要的環境。於是:
[Unit]
Description=Daemon to start He.net IPv6
Wants=network-online.target
下面我們需要定義一下服務啟動順序,不然連 / 目錄所在的硬碟都沒掛載就開始幹活,上哪兒找程序去呀。Systemd 服務啟動順序主要使用以下兩個標記定義的:
Before/After:要是一個服務 Before 另一個服務,那麼在並行啟動時(Systemd 總是用進程 0 並行啟動所有東西,然後通過這兩個標記來二次等待排序),那另一個服務這時就會等這個服務先啟動並返回狀態,注意是先啟動而不是啟動成功,因為失敗也是一種狀態,一定要成功才啟動另一個服務是通過依賴關系定義的。反之 After 亦然。
下面說下「關機」(可以是掛起,這時候有些服務是依然在跑的,比如網路喚醒)時候的順序:如果兩個服務都是要關掉的,Before 是先關自己,After 是先關別人,這很好理解; 但如果一個服務是要關,而另一個是要開的,那麼不管 Before/After 寫了什麼,總是優先關閉而不是開始。也就是比如服務 A Before 服務 B,但是服務 B 是在關,而服務 A 是在 restart,那麼服務 B 的順序在服務 A 的前面。
好啦,我們的單元應該在什麼的前後啟動呢?它不需要一定在什麼服務前面跑起來,這不像 ifup 和 dhcp,網路起不來獲取 ip 肯定沒用。我們只需要有網就可以了。「有網」在 Systemd 中也是由一個默認 target:network.target 提供的,於是我們的控制單元就定義好了:
[Unit]
Description=Daemon to start He.net IPv6
Wants=network-online.target
After=network.target
定義服務本體 [service]
在定義完了 Systemd 用來識別服務的單元後,我們來定義服務本體,依然是聲明:
[Service]
然後是聲明服務類型:
[Service]
Type=
Systemd 支持的服務類型有以下幾類:
simple 默認,這是最簡單的服務類型。意思就是說啟動的程序就是主體程序,這個程序要是退出那麼一切皆休。這在圖形界面里非常好理解,我打開 Amarok,退出它就沒有了。但是命令行的大部分程序都不會那麼設計,因為命令行的一個最基本原則就是一個好的程序不能獨占命令行窗口。所以輸入命令,回車,接著馬上返回給你提示符,但程序已經執行了。所以只有少數程序比如 python xxx.py 還使用這種方式。在這種類型下面,如果你的主程序是要響應其它程序的,那麼你的通信頻道應該在啟動本服務前就設好(套接字等),因此這種類型的服務,Systemd 運行它後會立刻就運行下面的服務(需要它的服務),這時沒有套接字後面的服務會失敗,寫 After 也沒用,因為 simple 類型不存在主進程退出的情況也就不存在有返回狀態的情況,所以它一旦啟動就認為是成功的,除非沒起來。
forking 標准 Unix Daemon 使用的啟動方式。啟動程序後會調用 fork() 函數,把必要的通信頻道都設置好之後父進程退出,留下守護精靈的子進程。你要是使用的這種方式,最好也指定下 PIDFILE=,不要讓 Systemd 去猜,非要猜也可以,把 GuessMainPID 設為 yes。
判斷是 forking 還是 simple 類型非常簡單,命令行里運行下你的程序,持續佔用命令行要按 Ctrl + C 才可以的,就不會是 forking 類型。
創建 PIDFILE 是你為它寫服務的程序的任務而不是 Systemd 的功能,甚至也不是 Sysvinit 腳本的功能。參考 startproc創建pid file的問題了解進一步的知識。因此如果你的程序確實是 forking 類型,但就是沒實現創建 PIDFILE 的功能,那麼建議使用 ExecStartPost= 結合 shell 命令來手動抓取進程編號並寫到 /var/run/xxx.pid。
oneshot 顧名思義,打一槍換一個地方。所以這種服務類型就是啟動,完成,沒進程了。常見比如你設置網路,ifup eth0 up,就是一次性的,不存在 ifup 的子進程(forking 那樣),也不存在主進程(simple 那樣),它運行完成後便了無痕跡。因為這類服務運行完就沒進程了,我們經常會需要 RemainAfterExit=yes。後面配置的意思是說,即使沒進程了,我們也要 Systemd 認為該服務是存在並成功了的。所以如果你有一個這樣的服務,服務啟動後,你再去 ifup eth0 up,這時你再看服務,依然顯示是 running 的。因為只要在執行那條一次性命令的時候沒出錯,那麼它就永遠認為它是成功並一直存在的,直到你關閉服務。
dbus 這個程序啟動時需要獲取一塊 DBus 空間,所以需要和 BusName= 一起用。只有它成功獲得了 DBus 空間,依賴它的程序才會被啟動。
一般人也就能用到上面四個,還有兩種少見的類型:
notify 這個程序在啟動完成後會通過 sd_notify 發送一個通知消息。所以還需要配合 NotifyAccess 來讓 Systemd 接收消息,後者有三個級別:none,所有消息都忽略掉; main,只接受我們程序的主進程發過去的消息; all,我們程序的所有進程發過去的消息都算。NotifyAccess 要是不寫的話默認是 main。
idle 這個程序要等它裡面調度的全部其它東西都跑完才會跑它自己。比如你 ExecStart 的是個 shell 腳本,裡面可能跑了一些別的東西,如果不這樣的話,那很可能別的東西的控制台輸出里會多一個「啟動成功」這樣的 Systemd 消息。
由於 He.net 的 IPv6 是用 iproute2 的 ip 命令來弄的,所以是一個 oneshot 一次性服務。
[Service]
Type=oneshot
RemainAfterExit=yes
接下來要設置 ExecStart, ExecStop。如果程序支持的話,你還可以去設置 ExecReload,Restart 等。注意,這里設置的是它們 Reload/Restart 的方式,但並不代表沒有它們 Systemd 就不能完成比如 systemctl restart xxx.service 這樣的任務,程序有支持自然最好,程序不支持那就先 stop 再 start 咯。同樣有特殊要求的時候你也可以去設置比如 ExecStartPre/ExecStartPost,RestartSec,TimeoutSec 等其它東西,參考鏈接里都有使用方法。
這里要特殊講一下 ExecStart:
如果你服務的類型不是 oneshot,那麼它只可以接受一個命令,參數不限,比如你先 ip tunnel create 再 ip tunnel0 up,那是兩個 ip 命令,如果你不是 oneshot 類型這樣是不行的。
如果有多條命令(oneshot 類型),命令之間以分號 ; 分隔,跨行可用反斜杠 \。
除非你的服務類型是 forking,否則你在這里輸入的命令都會被認為是主進程,不管它是不是。
於是我們的 [Service] 就寫好了:
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/ip tunnel add he-ipv6 mode sit remote 66.220.18.42 local 108.170.7.158 ttl 255 ; \
/usr/sbin/ip link set he-ipv6 up ; \
/usr/sbin/ip addr add 2001:470:c:1184::2/64 dev he-ipv6 ; \
/usr/sbin/ip route add ::/0 dev he-ipv6 ; \
/usr/sbin/ip -6 addr
ExecStop=/usr/sbin/ip route delete ::/0 dev he-ipv6 ; \
/usr/sbin/ip -6 addr del 2001:470:c:1184::2/64 dev he-ipv6 ; \
/usr/sbin/ip link set he-ipv6 down ; \
/usr/sbin/ip tunnel del he-ipv6
安裝服務 [install]
這可能有點繞,我服務文件都弄好了,放到 /etc/systemd/system(供系統管理員和用戶使用),/usr/lib/systemd/system(供發行版打包者使用)了,不就是安裝好了嘛。
這里說的是一種內部狀態,默認你放對位置它顯示的是 disabled,unloaded,所以我們要在 Systemd 內部對它進行一下 load,沒人要的東西是不需要安裝的(我們不收渣渣),所以我們要告訴 Systemd 它是有人要的,被誰要。一般都是被
[Install]
WantedBy=multi-user.target
要(multi-user.target 表示多用戶系統好了,簡單理解就是你可以登入了)。這樣在 multi-user.target 啟用時,我們的服務也就會被啟用了。
[Install] 部分下除了 WantedBy 還有兩種屬性,分別是:
Alias= 給你自己的別名,這樣 systemctl command xxx.service 的時候就可以不輸入完整的單元名稱。比如你給 NetworkManager 一個別名叫 Alias=nm,那你就可以 systemctl status nm.service 查看實際是 NetworkManager.service 的服務了。
Also= 安裝本服務的時候還要安裝別的什麼服務。比如我們的 He.net 腳本按理應該需要一個 iproute2.service 作為 also,但是 iproute2 實際上不需要 systemd 控制,所以就沒寫。它和 [Unit] 定義裡面的依賴關系相比,它管理的不是運行時依賴,而是安裝時。安裝好了之後啟動誰先誰後,誰依賴誰,和 Also= 都沒有關系。

❷ 如何解決源碼包安裝時的依賴性問題

不管是初步跨入linux殿堂的新手,還是具有多年經驗的專家,在安裝或編譯軟體包的過程中或多或少的都會遇到包的依賴問題,從而導致安裝過程無法繼續,比如管理員在安裝LAMP時,包需要libgd.so文件,而這個文件屬於GD軟體包。但是在安裝GD軟體包時,可能這個軟體包跟其他軟體包又具有依賴關系,又需要安裝其他軟體包才行。這時有的管理員便失去耐心。在遇到這種Linux軟體包依賴關系問題時,該如何解決呢?在談這個具體的措施之前,先跟大家聊聊Linux系統里的軟體依賴性問題。
一、什麼是依賴性耐喚明
程序依賴於程序代碼的共享庫,以便它們可以發出系統調用將輸出發送到設備或打開文件等(共享庫存在於許多方面,而不只局限於系統調用)。沒有共享庫,每次程序員開發一個新的程序,每個程序員都需要從頭開始重寫這些基本的系統操作。當編譯程序時,程序員將他的代碼鏈接到這些庫。如果鏈接是靜態的,編譯後的共享庫對象代碼就添加到程序執行文件中;如果是動態的,編譯後的共享庫對象代碼只在運行時需要它時由程序員載入。動態可執行文件依賴於正確的共享庫或共享對象來進行操作。rpm依賴性嘗試在安裝時強制實施動態可執行文件的共享對象需求,以便在以後當程序運行時不會有與動態鏈接過程有關的任何問題。
注意:還有一種類型的依賴性,它基於顯式的條目,rpm通過程序員將該依賴性強加到rpm配置文件中,但目前我們不關心這種類型的依賴性,這種依賴性比較容易解決。這里將重點放在rpm強制實施的更加復雜的共享對象依賴性。
二、動態可執行文件和共享對象
動態可執行文件使用最初編譯和鏈接程序時使用的庫文件的共享對象名稱來查找共享對象。它們在少數的幾個標准位置查找,比如在/lib和/usr/lib目錄及在LD_LIBRARY_PATH環境變數(主要用於指定查找共享庫,比如我們在安裝Oracle時指定路徑,exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib)指定的目錄中。順便提一下,在這些庫目錄中找到的共享對象可能不是真正的文件;它們可能是指向位於其他位置的真實庫文件的符號鏈接(但通常仍舊在標准庫目錄的一個目錄中)。至少從系統管理員的觀點是在用於創建共享庫文件的共享庫軟體包的名稱和共享庫文件的名稱之間通常沒有什麼關系。例如,GLIBC2.3軟體包用於創建libc.so.6共享庫文件。也從本示例中注意到,添加到共享庫文件名結束的版本號(.6)跟用於創建它的版本號(2.3)沒有關系。這是由共享庫軟體包開發人員有意完成的,以便GLIBC的新版本可以重用相同的共享庫文件名libc.so.6。這允許您在系統上載入新版本的GLIBC,而不用中斷動態鏈接到lib.so.6共享庫文件的所有昌告程序,當然假定新版本的GLIBC向後與動態可執行文件最初所鏈接的老版本GLIBC兼容。因此,即使庫文件或共享對象文件有與它們相關的版本號,這些版本號也不能幫助你確定他們來自哪個版本的共享軟體包。
注意:當將whatprovides選項用於rpm查詢命令時,可以獲得有關使用rpm軟體包載入到系統的現有共享對象的信息。這種混亂是由下面的事實造成的:單個共享庫文件可能支持某個范圍的共享庫軟體包版本。例如,要檢查soname庫文件/lib/libc.so.6支持的GLIBC共享庫軟體包,運行下面的鏈叢命令:
#objmp--all-headers/lib/libc.so.6|less
向下滾動此報告,直到到達Versiondefinitions:部分,以便查看libc.so.6共享庫文件支持哪些GLIBC版本:
Versiondefinitions:
10x010x0865f4e6libc.so.6
20x000x0d696910GLIBC_2.0
30x000x0d696911GLIBC_2.1
GLIBC_2.0
40x000x09691f71GLIBC_2.1.1
GLIBC_2.1
50x000x09691f72GLIBC_2.1.2
GLIBC_2.1.1
60x000x09691f73GLIBC_2.1.3
GLIBC_2.1.2
70x000x0d696912GLIBC_2.2
GLIBC_2.1.3
80x000x09691a71GLIBC_2.2.1
GLIBC_2.2
90x000x09691a72GLIBC_2.2.2
GLIBC_2.2.1
100x000x09691a73GLIBC_2.2.3
GLIBC_2.2.2
110x000x09691a74GLIBC_2.2.4
GLIBC_2.2.3
120x000x09691a76GLIBC_2.2.6
GLIBC_2.2.4
130x000x0d696913GLIBC_2.3
GLIBC_2.2.6
140x000x09691972GLIBC_2.3.2
GLIBC_2.3
150x000x09691973GLIBC_2.3.3
GLIBC_2.3.2
160x000x09691974GLIBC_2.3.4
GLIBC_2.3.3
170x000x0d696914GLIBC_2.4
GLIBC_2.3.4
180x000x0d696915GLIBC_2.5
GLIBC_2.4
190x000x0963cf85GLIBC_PRIVATE
GLIBC_2.5
200x000x0b792650GCC_3.0
在本示例中,1ibc.so.6共享庫文件支持原先為GLIBC版本2.0到2.5而開發的所有動態執行文件。注意:也可以使用objmp命令來從共享庫文件中提取soname,命令如下所示:
#objmp--all-headers/lib/libcrypto.so.0.9.8b|grepSONAME
SONAMElibcrypto.so.6
objmp:/lib/libcrypto.so.0.9.8b:
接下來,將討論rpm軟體包是如何生成的,以便在新系統上安裝rpm軟體包時,這些共庫依賴性是己知的。
三、Rpm軟體包和共享庫依賴性
當程序員生成rpm軟體包時,ldd命令用於報告動態可執行文件軟體包中所有動態可執行文件使用的所有共享庫。另一個混亂是由下面的事實帶來的:相同軟體包中的不同動態可執行文件可能與相同的共享庫軟體包的不同版本進行鏈接。例如,Heartbeat軟體包中的不同程序可能已經進行了開發,並動態鏈接到libc.so.6sonmae共享庫文件的不同GLIBC版本。對rpm命令使用-q和--requires參數,可以看到rpm軟體包需要的共享庫的完整清單。例如,要看到Heartbeatrpm軟體包所有的所需依賴性,請使用命令:
#rpm-q--requires-pheartbeat-1.x.x.i386.rpm
這產生了下面的報告:
sysklogd
/bin/sh
/bin/sh
/usr/bin/python
ld-linux.so.2
libapphb.so.0
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.2)
libc.so.6(GLIBC_2.3)
libccmclient.so.0
libdl.so.2
libglib-1.2.so.0
libhbclient.so.0
libpils.so.0
libplumb.so.0
libpthread.so.0
librt.so.1
libstonith.so.0
注意,在此報告中,libc.so.6soname是所需要的,此共享庫必須支持使用GLIBC共享軟體包版本號2.0、2.1、2.1.3、2.2和2.3進行鏈接的動態可執行文件。這是由下面的事實決定的:Heartbeat軟體包中的不同動態可執行文件是針對不同版本的libc.so.6庫的每個版本進行鏈接的。在了解了動態可執行文件、共享對象、soname和共享庫軟體包彼此是如何相關的後,下面准備來看這樣的一個例子:當嘗試安裝rpm軟體包,並且它由於依賴性錯誤而失敗時,會發生什麼。yum能夠從指定的伺服器自動下載RPM包並且安裝,可以自動處理依賴性關系,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
四、手工解決依賴性問題
通常,當嘗試安裝發行版中沒有包括的軟體包(及不能由像up2date、apt-get或Yum一樣的更新工具自動解決其依賴性的軟體包)時,將碰到rpm依賴性錯誤。例如,如果嘗試在老的Linux發行版上使用rpm–ivh*rpm命令,例如所有的Heartbeatrpm包,那麼在安裝過程中就可能碰到下面的錯誤:
error:faileddependencies:
libc.so.6(GLIBC_2.3)isneededbyheartbeat-1.x.x
libc.so.6(GLIBC_2.3)isneededbyheartbeat-pils-1.x.x
libcrypto.so.0.9.6isneededbyheartbeat-stonith-1.x.x
libsnmp-0.4.2.6.soisneededbyheartbeat-stonith-1.x.x
注意,rpm命令沒有干擾報告所需的每個GLIBC共享庫軟體包版本號——它只報告所需的最高編號的版本號(GLIBC_2.3)。(假定原來的軟體包開發人員不會將相同軟體包中的可執行文件鏈接到不兼容版本的共享庫軟體包)所有的這些故障都報告所需的共享庫名稱或soname(而不是文件名稱,soname始終以「lib」開始)。但可以刪除添加到rpm報告的soname結束的版本號,並快速檢查以查看是否在系統中使用locate命令安裝這些共享庫(假設您的locate資料庫是最新的,有關更多信息,請參閱locate或slocate的手冊頁)。例如,要查找libcrypto享庫文件,要輸入:
#locatelibcrypto
[root@localhost~]#locatelibcrypto
/lib/libcrypto.so.0.9.8b
/lib/libcrypto.so.6
/root/.Trash/vmware-tools-distrib/lib/lib32/libcrypto.so.0.9.8
/root/.Trash/vmware-tools-distrib/lib/lib32/libcrypto.so.0.9.8/libcrypto.so.0.9.8
/root/.Trash/vmware-tools-distrib/lib/lib64/libcrypto.so.0.9.8
/root/.Trash/vmware-tools-distrib/lib/lib64/libcrypto.so.0.9.8/libcrypto.so.0.9.8
/usr/lib/libcrypto.a
/usr/lib/libcrypto.so
/usr/lib/pkgconfig/libcrypto.pc
/usr/lib/vmware-tools/lib32/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib32/libcrypto.so.0.9.8/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib64/libcrypto.so.0.9.8
/usr/lib/vmware-tools/lib64/libcrypto.so.0.9.8/libcrypto.so.0.9.8
如果此命令沒有在系統上找到一個libcrypto共享庫文件,將需要轉到Internet並找出哪個共享庫軟體包包含此共享庫文件。完成此項工具的一個快速和簡便方式是只要在http://rpmfind.net上將共享庫的名稱輸入到搜索欄中。如果將文本libcrypto.so輸入到此搜索貞中,將很快知道此共享庫是由openssl軟體包提供的。

如果老版本的共享庫數據包已經安裝在系統上,可以用如下的命令確認此軟體包含您需要的共享庫文件:
#rpm-q--providesopenssl
[root@localhost~]#rpm-q--providesopenssl
config(openssl)=0.9.8b-10.el5
lib4758cca.so
libaep.so
libatalla.so
libchil.so
libcrypto.so.6
libcswift.so
libgmp.so
libnuron.so
libssl.so.6
libsureware.so
libubsec.so
openssl=0.9.8b-10.el5
此命令報告此rpm軟體包中提供的所有內容(這包括軟體包提供的共享庫文件的soname)。注意:如前面指出的,共享庫軟體包版本號沒有並且應該沒有與共享庫文件(soname)版本號的任何對應關系。這里不進行這方面的討論,因為soname符號鏈接可能指向不同版本的共享庫文件,這也是在盡量避免在安裝新版本的共享軟體包時中斷現有動態可執行文件的情況下完成的。
五、自動解決依賴性故障
當您使用rpm軟體包來生成、升級或添加新的特性到系統時,依賴性故障可能很快變成一場惡夢。只要通過使用您的發行版供應商的升級服務或工具,就可以避免這場惡夢。例如,當選擇要安裝的rpm軟體包時,RedHat工具up2date自動從RedHat下載並安裝所有rpm依賴性。下面就點上列出了幾個完成相同事情的支持社區的免費方法:http://www.rpm.org/。下面將只進一步看到這些自動更新工具中的一種:Yum。
1.使用Yum來安裝rpm軟體包
Yum(YellowdogUpdater,Modified)程序可從下面網址下載:http://yum.baseurl.org/download/3.4/yum-3.4.3.tar.gz
在下載了此軟體包後,可以使用下面的命令像任何其他rpm軟體包那樣安裝它:
#rpm-ivhyum*
您可能需要更新想用於下載您的rpm軟體包的存儲庫。有關Fedora的可用Yum存儲庫的清單在http://www.fedoratracker.org要切換到不同的存儲庫,下載這些文件中的一個文件,並將該文件作為/etc/yum.conf文件安裝。現在可以用下面的命令告訴Yum報告存儲在Yum存儲庫中、可用於安裝所有軟體包:
#yumlist
[root@localhost~]#yumlist|more
.
RHNsupportwillbedisabled.
Loading"security"plugin
Loading"rhnplugin"plugin
InstalledPackages
Deployment_Guide-en-US.noarch5.2-9installed
Deployment_Guide-zh-CN.noarch5.2-9installed
Deployment_Guide-zh-TW.noarch5.2-9installed
GConf2.i3862.14.0-9.el5installed
GConf2-devel.i3862.14.0-9.el5installed
ImageMagick.i3866.2.8.0-4.el5_1.1installed
MAKEDEV.i3863.23-1.2installed
MySQL-python.i3861.2.1-1installed
NetworkManager.i3861:0.6.4-8.el5installed
NetworkManager-glib.i3861:0.6.4-8.el5installed
2.用Yum安裝新的rpm軟體包
在本示例中,將安裝新的GLIBC軟體包。用簡單的命令安裝最新的GLIBC及其所有依賴性:
#yumupdateglibc
如果一切正常,Yum程序將自動檢測、下載並安裝最新GLIBC軟體包所需要的所有rpm軟體包(這里的GLIBC軟體包是為您的發行版而構建的,不一定是可用的最新版GLIBC軟體包(使用發行版所批準的GLIBC共享庫軟體包版本號或冒險安裝沒有使用正常系統操作所需要的動態可執行文件的GLIBC軟體包版本)。也可以將list參數用於Yum和grep命令來查找要安裝的軟體包。例如,要查找名稱中有SNMP的軟體包,請輸入:
#yumlist|grepsnmp
此命令返回如下報告:
.
RHNsupportwillbedisabled.
net-snmp.i3861:5.3.1-24.el5installed
net-snmp-libs.i3861:5.3.1-24.el5installed
net-snmp-perl.i3861:5.3.1-24.el5installed
net-snmp-utils.i3861:5.3.1-24.el5installed
現在可以容易地使用YUM下載並安裝所有這些rpm軟體包。
六、關於升級Gilbc的建議
Glibc庫是Linux底層的運行庫,其性能對於整個系統的運行有重要的意義。Glibc庫包含了大量函數,其中的函數可大致分成兩類,一類是與操作系統核心溝通的系統調用介面,它們作為功能型函數被調用,提供對Linux操作系統調用的包裝與預處理。另外一類為一般的函數對象,它們提供了經常使用的功能的實現,作為工具型函數使用。在實踐中,有不少軟體就是依賴與Glibc版本才能安裝並運行,說白了對於Glibc版本要求是版本高了不行,低了還不成。這些編譯環境中的應用程序也和其它程序一樣必須有運行的環境,我常遇到管理員在生產中給伺服器裝了最新的Linux發行版,結果應用軟體裝不上去,原因是Glibc的版本不對,有的是寫在原發行版glibc上升級有的是降級,結果倒是整個系統的崩潰,實踐經驗告訴我,你只有選擇相應Linux發行版里對應的glibc,例如我們單位的一個應用軟體時在rhel3.0下開發的,那麼就得要對應的發行版,換了別的就難說了,任何自己升級或降級Glibc來適應應用軟體的做法都是不可取的,問題最後的解決方法是找到了RHEL3裝上就解決了。在表一中,我把幾個linux發行版原配的Glibc版本列出,供大家參考。
點擊圖片查看大圖

Glibc庫與核心功能組件
上圖一說明:
GCC依賴於glibc
binutils依賴於glibc(binutils提供了一系列用來創建、管理和維護二進制目標文件的工具程序,如匯編(as)、連接(ld)、靜態庫歸檔(ar)、反匯編)
make依賴於glibc
頭文件是在編譯時候gcc所需要的,但本身都是一些文本文件,因此沒有需要的運行環境。
常用工具依賴於glibc和各種需要用到的動態庫。
下表一列出了多個重要Linux發行版的Glibc的情況
Linux發行版Glibc版本
Redhat9glibc-2.3.2-5
Fedora1glibc-2.3.2
RedhatEnterpriseLinuxAs3glibc-2.3.2-95
RedhatEnterpriseLinuxAs4glibc-2.3.4
RedhatEnterpriselinux5glibc-2.5-24
RedhatEnterpriselinux6glibc-2.9
Centos5.xglibc-2.5
-2.3.2-92
-2.4.31.54
-2.9

點擊圖片查看大圖

Linux發行版glibc(32)位
下面介紹幾個查詢glibc版本號的方法:
#ls–al/lib/libc*
或者是用下面的命令也可以實現
#rpm–qp|grepglibc
基於debian的系統通過dpkg–l|greplibc6也可以查到,總之一般都在/usr/share/doc目錄下都能看到glibc的相關信息。
七、小結
大部分情況下,在遇到軟體包依賴關系問題的時候,操作系統提供的文件名字與軟體包名字都會有直接的聯系。有可能文件的名字就是軟體包的名字。但是有些時候文件的名字與軟體包的名字會相差甚遠。此時大部分系統管理員可能光憑文件名字無法找到對應的軟體包。此時可以先在系統安裝光碟里找,如果找到那時最佳選項,然後就需要藉助筆者上面談到的一些專業網站,去查詢軟體包的名字了。當系統管理員安裝了某個軟體之後,如果存在軟體包之間的依賴關系,則最好能夠拿本子或者通過其他手段記錄下來。以便下次方便實用,注意工作中的積累,相信絕大部分的軟體包依賴關系問題都會迎刃而解。

❸ linux嬋媧葷綉鍗linux嬋媧

linux緋葷粺鎬庝箞綆楁縺媧伙紵

Linux鎿嶄綔緋葷粺姝e父瀹夎呬箣鍚庡氨綆楁槸嬋媧諱簡銆侺inux鎿嶄綔緋葷粺鏄涓嬈懼紑婧愬厤璐圭殑鎿嶄綔緋葷粺銆傛墍璋撳紑婧愬厤璐癸紝灝辨槸璇翠綘鍙浠ユ煡鐪嬪畠鐨勬簮浠g爜錛屽苟涓斾綘鑾峰緱榪欎釜鎿嶄綔緋葷粺涓嶉渶瑕佹敮浠樹換浣曡垂鐢ㄣ

浣犺佸畨瑁匧inux鎿嶄綔緋葷粺錛屽彧闇瑕佹牴鎹浣犵殑紜浠舵儏鍐典互鍙婁綘鐨勫枩濂芥潵閫夋嫨鐩稿簲鐨勭増鏈榪涜屽畨瑁咃紝涓嶉渶瑕佷笓闂ㄦ縺媧葷殑銆

linux鎬庝箞嬋媧伙紝甯愬彿璁㈤槄榪欎釜闂棰樻庝箞瑙e喅錛

鍏蜂綋鏂規硶濡備笅錛

1銆侀栧厛鍒扮孩甯界殑瀹樼綉娉ㄥ唽鐢ㄦ埛銆

2銆佺櫥褰曠孩甯藉畼緗戱紝鍦ㄨ㈤槄綆$悊欏圭洰涓嬶紝閫塖ubscriberInventor錛屾敞鍐岀郴緇燂紝榪欐椂浼氳佹眰杈撳叆闅忓寘瑁呴檮甯︾殑綰㈠附鐨勫簭鍙鳳紝鏄16浣嶅瓧姣嶅姞鏁板瓧鐨勯偅涓銆

3銆佸湪鏈哄櫒涓婇夋嫨緋葷粺-綆$悊-綰㈠附璁㈤槄綆$悊錛屽嵆鍙灝嗚㈤槄涓庢満鍣ㄩ摼鎺ヤ簡銆

4銆佽繖鏃跺氨涓嶈佸啀浣跨敤緋葷粺涓鐨勨淩HN娉ㄥ唽鈥濊繘琛屾敞鍐屼簡銆

5銆侀噸鏂版敞鍐岀殑鏂規硶銆傚傛灉閲嶆柊瀹夎呬簡緋葷粺錛屽氨闇瑕侀噸鏂伴摼鎺ヨ㈤槄錛屽彧闇鍦ㄧ孩甯藉畼緗戝垹闄ゅ凡娉ㄥ唽鐨勭郴緇燂紝鍐嶉噸鏂版敞鍐岀郴緇熷嵆鍙銆

linux鏈嶅姟鍣ㄦ庝箞閲嶅惎姝ラわ紵

浣犳槸鍚︽e湪浣跨敤鍩轟簬Ubuntu鐨勭郴緇燂紝鐒跺悗鍙戠幇鏃犳硶榪炴帴緗戠粶錛熶綘涓瀹氫細寰堟儕璁訛紝寰堝氱殑闂棰橀兘鍙浠ョ畝鍗曞湴閫氳繃閲嶅惎鏈嶅姟瑙e喅銆傚湪榪欑瘒鏂囩珷涓錛屾垜浼氫粙緇嶅湪Ubuntu鎴栬呭叾浠朙inux鍙戣岀増涓閲嶅惎緗戠粶鐨勫嚑縐嶆柟娉曪紝浣犲彲浠ユ牴鎹鑷韜闇瑕侀夋嫨瀵瑰簲鐨勬柟娉曘傝繖浜涙柟娉曞熀鏈鍒嗕負涓ょ被錛氶氳繃鍛戒護琛屾柟寮忛噸鍚緗戠粶濡傛灉浣犱嬌鐢ㄧ殑Ubuntu鏈嶅姟鍣ㄧ増錛岄偅涔堜綘宸茬粡鍦ㄤ嬌鐢ㄥ懡浠よ岀粓絝浜嗐傚傛灉浣犱嬌鐢ㄧ殑鏄妗岄潰鐗堬紝閭d箞浣犲彲浠ラ氳繃蹇鎹烽敭Ctrl+Alt+TUbuntu閿鐩樺揩鎹烽敭鎵撳紑鍛戒護琛岀粓絝銆傚湪Ubuntu涓錛屾湁澶氫釜鍛戒護鍙浠ラ噸鍚緗戠粶銆傝繖浜涘懡浠わ紝涓閮ㄥ垎鎴栬呰村ぇ閮ㄥ垎錛屼篃閫傜敤浜庡湪Debian鎴栬呭叾浠栫殑Linux鍙戣岀増涓閲嶅惎緗戠粶銆

1銆乶etworkmanager鏈嶅姟榪欐槸閫氳繃鍛戒護琛屾柟寮忛噸鍚緗戠粶鏈綆鍗曠殑鏂規硶銆傚畠鐩稿綋浜庢槸閫氳繃鍥懼艦鍖栫晫闈㈤噸鍚緗戠粶錛堥噸鍚疦etwork-Manager鏈嶅姟錛夈俿udoservicenetwork-managerrestart姝ゆ椂錛岀綉緇滃浘鏍囦細娑堝け涓浼氬効鐒跺悗閲嶆柊鏄劇ず銆

2銆乻ystemdservice鍛戒護浠呬粎鏄榪欎釜鏂瑰紡鐨勪竴涓灝佽咃紙鍚屾牱鐨勪篃鏄痠nit.d緋誨垪鑴氭湰鍜孶pstart鐩稿叧鍛戒護鐨勫皝瑁咃級銆俿ystemctl鍛戒護鐨勫姛鑳借繙澶氫簬service鍛戒護銆傞氬父鎴戞洿鍠滄浣跨敤榪欎釜鍛戒護銆俿.service榪欐椂錛岀綉緇滃浘鏍囧張浼氭秷澶變竴浼氬効銆傚傛灉浣犳兂浜嗚Вsystemctl鐨勫叾浠栭夐」,鍙浠ュ弬鑰僲an甯鍔╂枃妗c

3銆乶mcli榪欐槸Linux涓婂彲浠ョ$悊緗戠粶鐨勫彟涓涓宸ュ叿銆傝繖鏄涓涓鍔熻兘寮哄ぇ鑰屼笖瀹炵敤鐨勫伐鍏楓傚緢澶氱郴緇熺$悊鍛橀兘鍠滄浣跨敤璇ュ伐鍏鳳紝鍥犱負瀹冮潪甯稿規槗浣跨敤銆傝繖縐嶆柟娉曟湁涓や釜鎿嶄綔姝ラわ細鍏抽棴緗戠粶錛屽啀寮鍚緗戠粶銆俿udonmclinetworkingoff榪欐牱灝變細鍏抽棴緗戠粶錛岀綉緇滃浘鏍囦細娑堝け銆傛帴涓嬫潵錛屽啀寮鍚緗戠粶錛歴udonmclinetworkingon浣犲彲浠ラ氳繃man甯鍔╂枃妗d簡瑙nmcli鐨勬洿澶氱敤娉曘

4銆乮fupifdown榪欎袱涓鍛戒護鐩存帴鎿嶄綔緗戝彛錛屽垏鎹㈢綉鍙f槸鍚﹀彲浠ユ敹鍙戝寘鐨勭姸鎬併傝繖鏄疞inux涓鏈搴旇ヤ簡瑙g殑緗戠粶鍛戒護涔嬩竴銆備嬌鐢╥fdown鍏抽棴鎵鏈夌綉鍙o紝鍐嶄嬌鐢╥fup閲嶆柊鍚鐢ㄧ綉鍙c傞氬父鎺ㄨ崘鐨勫仛娉曟槸灝嗚繖涓や釜鍛戒護涓璧蜂嬌鐢ㄣ俿udoifdown-asudoifup-a娉ㄦ剰錛氳繖縐嶆柟娉曚笉浼氳╃綉緇滃浘鏍囦粠緋葷粺鎵樼洏涓娑堝け錛屽彟澶栵紝鍚勭嶇綉緇滆繛鎺ヤ篃浼氭柇銆傝ˉ鍏呭伐鍏鳳細nmtui榪欐槸緋葷粺綆$悊鍛樹滑甯哥敤鐨勫彟澶栦竴縐嶆柟娉曘傚畠鏄鍦ㄥ懡浠よ岀粓絝涓綆$悊緗戠粶鐨勬枃鏈鑿滃崟宸ュ叿銆俷mtui鎵撳紑濡備笅鑿滃崟錛歯mtuiMenu娉ㄦ剰錛氬湪nmtui涓錛屽彲浠ラ氳繃up鍜宒own鏂瑰悜閿閫夋嫨閫夐」銆傞夋嫨鈥淎ctivateaconnection鈥濓細鎸変笅鍥炶濺閿錛屾墦寮鈥渃onnections鈥濊彍鍗曘俷mtuiConnectionsMenu鎺ヤ笅鏉ワ紝閫夋嫨鍓嶉潰甯︽槦鍙鳳紙*錛夌殑緗戠粶銆傚湪榪欎釜渚嬪瓙涓錛屽氨鏄疢GEO72銆係.鎸変笅鍥炶濺閿銆傝繖灝卞皢鈥滃仠鐢ㄢ濅綘鐨勭綉緇滆繛鎺ャ俷閫夋嫨浣犺佽繛鎺ョ殑緗戠粶錛歋.鎸変笅鍥炶濺閿銆傝繖鏍峰氨閲嶆柊嬋媧諱簡鎵閫夋嫨鐨勭綉緇滆繛鎺ャ俷mtuiConnectionsMenu鎸変笅Tab閿涓ゆ★紝閫夋嫨鈥淏ack鈥濓細.鎸変笅鍥炶濺閿錛屽洖鍒皀mtui鐨勪富鑿滃崟銆俷mtuiMainMenu閫夋嫨鈥淨uit鈥濓細nmtuiQuitMainMenu閫鍑鴻ョ晫闈錛岃繑鍥炲埌鍛戒護琛岀粓絝銆傚氨榪欐牱錛屼綘宸茬粡鎴愬姛閲嶅惎緗戠粶浜嗐傞氳繃鍥懼艦鍖栫晫闈㈤噸鍚緗戠粶鏄劇劧錛岃繖鏄疷buntu妗岄潰鐗堢敤鎴烽噸鍚緗戠粶鏈綆鍗曠殑鏂規硶銆傚傛灉榪欎釜鏂規硶涓嶇敓鏁堬紝浣犲彲浠ュ皾璇曚嬌鐢ㄥ墠鏂囨彁鍒扮殑鍛戒護琛屾柟寮忛噸鍚緗戠粶銆侼M灝忕▼搴忔槸NetworkManager鐨勭郴緇熸墭鐩樼▼搴忔爣蹇椼傛垜浠灝嗕嬌鐢ㄥ畠鏉ラ噸鍚緗戠粶銆傞栧厛錛屾煡鐪嬮《閮ㄧ姸鎬佹爮銆備綘浼氬湪緋葷粺鎵樼洏鎵懼埌涓涓緗戠粶鍥炬爣錛堝洜涓烘垜浣跨敤Wi-Fi錛屾墍浠ヨ繖閲屾槸涓涓猈i-Fi鍥炬爣錛夈傛帴涓嬫潵錛岀偣鍑昏ュ浘鏍囷紙涔熷彲浠ョ偣鍑婚煶閲忓浘鏍囨垨鐢墊睜鍥炬爣錛夈傛墦寮鑿滃崟銆傞夋嫨鈥淭urnOff鈥濆叧闂緗戠粶銆俁estartnetworkinUbuntu緗戠粶鍥炬爣浼氬湪鐘舵佹爮涓娑堝け錛岃繖琛ㄧず浣犲凡緇忔垚鍔熷叧闂緗戠粶浜嗐傚啀嬈$偣鍑葷郴緇熸墭鐩橀噸鏂版墦寮鑿滃崟錛岄夋嫨鈥淭urnOn鈥濓紝閲嶆柊寮鍚緗戠粶銆俁estartingnetworkinUbuntu鎮鍠滐紒浣犵幇鍦ㄥ凡緇忛噸鍚浣犵殑緗戠粶浜嗐傚叾浠栨彁紺猴細鍒鋒柊鍙鐢ㄧ綉緇滃垪琛ㄥ傛灉浣犲凡緇忚繛鎺ヤ笂涓涓緗戠粶錛屼絾鏄浣犳兂榪炴帴鍒板彟澶栦竴涓緗戠粶錛屼綘濡備綍鍒鋒柊WiFi鍒楄〃錛屾煡鎵懼叾浠栧彲鐢ㄧ殑緗戠粶鍛錛熸垜鏉ュ悜浣犲睍紺轟竴涓嬨俇buntu娌℃湁鍙浠ョ洿鎺モ滃埛鏂癢iFi緗戠粶鈥濈殑閫夐」錛屽畠鏈夌偣闅愯斀銆備綘闇瑕佸啀嬈℃墦寮閰嶇疆鑿滃崟錛岀劧鍚庣偣鍑燴淪electNetwork鈥濄俁efreshwifinetworklistinUbuntu閫夋嫨瀵瑰簲鐨勭綉緇滀慨鏀逛綘鐨刉iFi榪炴帴銆備綘鏃犳硶椹涓婄湅鍒板彲鐢ㄧ殑鏃犵嚎緗戠粶鍒楄〃銆傛墦寮緗戠粶鍒楄〃涔嬪悗錛屽ぇ姒傞渶瑕5縐掓墠浼氭樉紺哄叾瀹冨彲鐢ㄧ殑鏃犵嚎緗戠粶銆係絳夊緟澶ф5縐掗挓錛岀湅鍒板叾浠栧彲鐢ㄧ殑緗戠粶銆傜幇鍦錛屼綘灝卞彲浠ラ夋嫨浣犳兂瑕佽繛鎺ョ殑緗戠粶錛岀偣鍑昏繛鎺ャ傝繖鏍峰氨瀹屾垚浜嗐傛葷粨閲嶅惎緗戠粶榪炴帴鏄姣忎釜Linux鐢ㄦ埛鍦ㄤ嬌鐢ㄨ繃紼嬩腑蹇呴』緇忓巻鐨勪簨鎯呫傛垜浠甯屾湜榪欎簺鏂規硶鍙浠ュ府鍔╀綘澶勭悊榪欐牱鐨勯棶棰橈紒浣犳槸濡備綍閲嶅惎鎴栫$悊浣犵殑緗戠粶鐨勶紵鎴戜滑鏄鍚﹁繕鏈夐仐婕忕殑錛熻峰湪涓嬫柟鐣欒█銆倂ia:https://itsfoss.com/restart-network-ubuntu浣滆咃細Sergiu閫夐橈細lujun9972璇戣咃細bodhix鏍″癸細wxy鏈鏂囩敱LCTT鍘熷壋緙栬瘧錛孡inux涓鍥借崳瑾夋帹鍑

鉶氭嫙鏈篖inux鐜澧冧笅錛岀綉鍗℃縺媧誨け璐ワ紝鏃犳硶鑷鍔ㄥ垎閰岻P奼傛湁緇忛獙鐨勶紵

鉶氭嫙鏈虹幆澧冧笅鑾峰彇DHCP鍒嗛厤鐨処P錛岄渶瑕佸仠鐢ㄧ湡鏈猴紙瀹誇富鏈猴級鐨勨淰MwareDHCPService鈥濇湇鍔★紝linux瀹㈡埛鏈虹綉緇滄帴鍙e瑰簲閰嶇疆鏂囦歡/etc/sysconfig/network-scripts/ifcfg-eth0涓閰嶇疆欏規敼涓築OOTPROTO=dhcp錛岀劧鍚庨噸鍚鏈嶅姟錛歴ervicenetworkrestart鍗沖彲錛岀『淇滵HCP鏈嶅姟鍣ㄩ厤緗姝g『銆

鏈夋病鏈夎蔣浠跺畨瑁呯郴緇燂紝榪樺彲浠ヤ笉鐢ㄦ縺媧葷殑鍟婏紵

宸茬粡嬋媧葷殑Ghost灝卞彲浠ヤ笉鐢ㄦ縺媧匯佽繖涓鍜岀郴緇熺増鏈鏄娌℃湁鍏崇郴鐨勩佸彧瑕佹槸姝g増鐨勭郴緇熻偗瀹氳佹縺媧匯佸綋鐒躲佹兂浜嗕竴涓嬫垜璇寸殑涔熶笉瀵廣佸紑婧愮殑緋葷粺涓嶉渶瑕佹縺媧匯佹瘮濡侺inux銆佸皬綰㈠附涔嬬被鐨勭郴緇熶笉闇瑕佹縺媧匯佸洜涓轟粬浠鏄寮婧愮殑銆佷笉鐭ラ亾浣犳槸澶х炶繕鏄灝忕櫧銆佽佹槸澶х炵殑璇濊繖浜涘簲璇ラ兘鐭ラ亾銆佸皬鐧界殑璇濊磋繖浜涗綘涔熶笉澶鎳傘佸綋灝忕櫧澶勭悊鍚с乄indows鐨勬g増緋葷粺閮介渶瑕佹縺媧匯佺洍鐗堝彲浠ヤ笉闇瑕佹縺媧伙紒

❹ linux系統下安裝usb網卡驅動圖文

  1. 確認usb-wifi設備型號 , 根據確認結果選擇驅動信息。

  2. 安裝驅動 mt7601u , 如果已經自帶跳過此步驟

  3. 配置驅動啟動後自動載入。

  4. 重啟驗證是否成功的自動載入驅動模塊。

  5. 確認usb-wifi設備型號 , 根據確認結果選擇驅動信息。


## 初始USB接入時載入顯示

lsusb| grep Ralink

Bus 001 Device 003: ID 148f:2878 Ralink Technology, Corp.

## lsusb執行後顯示信息中有 usb-wifi設備時繼續執行如下命令,進行模式切換(對於存在多模式設備可以正確顯示出wifi設備的真實型號)

usb_modeswitch -KW -v 148f -p 2878

## 模式切換後載入顯示

lsusb| grep Ralink

Bus 001 Device 003: ID 148f:7601 Ralink Technology, Corp.


可以看到型號為 7601 ,據此我們選擇 mt7601u 驅動進行『安裝。


安裝驅動 mt7601u , 如果已經自帶跳過此步驟

方法1:有可能系統內核已經集成好了你需要的驅動模塊,只需要手工載入以下驗證是否有效,如果無效再選擇方法2.

方法2:github 搜索型號的驅動源碼,手動編譯安裝 。


安裝完畢後,需要配置下 wlan0 的配置信息, 創建一個ifcfg-wlan0文件(如果使用的是 NetworkManager 服務可能不需要配置就可以使用了)


$ cat /etc/sysconfig/network/ifcfg-wlan0

BOOTPROTO='dhcp'

BROADCAST=''

DHCLIENT_SET_DEFAULT_ROUTE='yes'

ETHTOOL_OPTIONS=''

IPADDR=''

MTU=''

NAME=''

NETMASK=''

NETWORK=''

REMOTE_IPADDR=''

STARTMODE='auto'

WIRELESS_AP=''

WIRELESS_AP_SCANMODE='1'

WIRELESS_AUTH_MODE='psk'

WIRELESS_BITRATE='auto'

WIRELESS_CA_CERT=''

WIRELESS_CHANNEL=''

WIRELESS_CLIENT_CERT=''

WIRELESS_CLIENT_KEY=''

WIRELESS_CLIENT_KEY_PASSWORD=''

WIRELESS_DEFAULT_KEY='0'

WIRELESS_EAP_AUTH=''

WIRELESS_EAP_MODE=''

WIRELESS_ESSID='CPE_05010'

WIRELESS_FREQUENCY=''

WIRELESS_KEY=''

WIRELESS_KEY_0=''

WIRELESS_KEY_1=''

WIRELESS_KEY_2=''

WIRELESS_KEY_3=''

WIRELESS_KEY_LENGTH='128'

WIRELESS_MODE='Managed'

WIRELESS_NICK=''

WIRELESS_NWID=''

WIRELESS_PEAP_VERSION=''

WIRELESS_POWER='no'

WIRELESS_WPA_ANONID=''

WIRELESS_WPA_IDENTITY=''

WIRELESS_WPA_PASSWORD=''

WIRELESS_WPA_PSK='Abcd1234'

配置驅動啟動後自動載入。

具體配置方法可以參考 man moles-load.d 信息可以詳細理解。


創建一個 mt7601u.conf 文件, 內容如下


# echo "mt7601u" > /etc/moles-load.d/mt7601u.conf

# cat /etc/moles-load.d/mt7601u.conf

mt7601u

重啟驗證是否成功的自動載入驅動模塊。

❺ Linux中Wi-Fi無線網路和AP無線熱點的配置教程

0.Linux下的Wi-Fi配置

無線網路飛速發展的今天,許多設備都提供了連接無線網路的功能。

那麼Linux下的wifi到底該怎麼配置、連接呢??

開始配置之前,我們要說說iw家族。iw是linux下常用的wifi配置工具,網上有相應的庫和源碼。全名為wirelessTools。

配置wifi模塊,並連接相應的無線網路過程:主要使用iwpriv命令

(1)掃描可用的無線網路:

代碼如下:

iwlist wifi-name scanning  

其中wifi-name為無線網卡的名字,比如網卡eth0就是系統默認的網卡名字, wifi-name可以用ifconfig查看,一般為ra0。

(2)看掃描到的網路信息,按要連接的網路類型進行配置。以下為掃描到的網路:

代碼如下:

iwlist ra0 scanning  

===rt_ioctl_giwscan. 11(11) BSS returned, data-length = 1427  

ra0       Scan completed :  

 Cell 01 - Address: C4:CA:D9:1D:9E:A0  

   Protocol:802.11b/g/n  

   ESSID:""  

   Mode:Managed  

   Frequency:2.412 GHz (Channel 1)  

   Quality=7/100  Signal level=-87 dBm  Noise level=-82 dBm  

   Encryption key:off  

   Bit Rates:54 Mb/s  

 Cell 02 - Address: FC:75:16:A1:A9:16  

   Protocol:802.11b/g/n  

   ESSID:"jxj_rd"  

   Mode:Managed  

   Frequency:2.452 GHz (Channel 9)  

   Quality=94/100  Signal level=-53 dBm  Noise level=-92 dBm  

   Encryption key:on  

   Bit Rates:54 Mb/s  

   IE: WPA Version 1  

Group Cipher : TKIP  

Pairwise Ciphers (2) : TKIP CCMP  

Authentication Suites (1) : PSK  

   IE: IEEE 802.11i/WPA2 Version 1  

Group Cipher : TKIP  

Pairwise Ciphers (2) : TKIP CCMP  

Authentication Suites (1) : PSK  

 Cell 03 - Address: C4:CA:D9:02:2A:70  

   Protocol:802.11b/g/n  

   ESSID:""  

   Mode:Managed  

   Frequency:2.462 GHz (Channel 11)  

   Quality=83/100  Signal level=-57 dBm  Noise level=-92 dBm  

   Encryption key:off  

   Bit Rates:54 Mb/s  

 Cell 04 - Address: 14:D6:4D:75:CA:9C  

   Protocol:802.11b/g/n  

   ESSID:"liangym"  

   Mode:Managed  

   Frequency:2.472 GHz (Channel 13)  

   Quality=100/100  Signal level=-27 dBm  Noise level=-92 dBm  

   Encryption key:on  

   Bit Rates:54 Mb/s  

   IE: WPA Version 1  

Group Cipher : CCMP  

Pairwise Ciphers (1) : CCMP  

Authentication Suites (1) : PSK  

   IE: IEEE 802.11i/WPA2 Version 1  

Group Cipher : CCMP  

Pairwise Ciphers (1) : CCMP  

Authentication Suites (1) : PSK  

如上:ESSID項的值即為無線網路的名字,如上的jxj_rd等。如果值為空,說明在無線路由勾選了隱藏ESSID的選項。

ESSID是很關鍵的,如果被隱藏了,也不是不能連接,而是需要破解,用到其他的工具,非常麻煩。至於如何破解,不是本文敘述的內容,有興趣的朋友可以網上搜索。

得到了網路的信息,接下來就是配置連接選項了。以連接jxj_rd為例,我們看看具體的過程:

(1) 設置要連接的網路類型:

代碼如下:

iwpriv ra0 set NetworkType=Infra  

(2) 設置要連接的無線網路的安全模式:

代碼如下:

iwpriv ra0 set AuthMode=WPA2PSK  

(3) 設置網路加密方式:(CCMP即為AES)

代碼如下:

iwpriv ra0 set EncrypType=TKIP  

(4) 設置連接時的密碼: ********為加密網路的密碼

代碼如下:

iwpriv ra0 set WPAPSK=*******  

(5) 連接該網路:有兩種方式:

A、用iwpriv命令

代碼如下:

iwpriv ra0 set SSID=jxj_rd  

B、用iwconfig命令

代碼如下:

iwconfig ra0 essid jxj_rd  

至此,如果密碼正確,就可以連接上網路jxj_rd了。如果你不放心,可以用命令查看狀態:

代碼如下:

iwpriv ra0 connStatus

當然,你也可以用iwconfig命令查看狀態,這里不再贅述。

執行 iwlist 如果 Supported interface modes 的下有 AP 的話表示該網卡支持AP模式,可以創建無線熱點。

比如我的無線網卡是Qualcomm Atheros AR9485 Wireless Network Adapter,Linux內核自帶了驅動ath9k,支持創建AP無線熱點。

下面我們就著重來講無線熱點的創建步驟:

1. 安裝hostapd和dhcpd


代碼如下:

sudo apt-get install hostapd isc-dhcp-server

開機不需要啟動這兩個服務,建議把它們關掉:

代碼如下:

sudo update-rc.d -f hostapd remove

注釋掉下面兩個文件start on那一行:

代碼如下:

sudo nano /etc/init/isc-dhcp-server.conf

sudo nano /etc/init/isc-dhcp-server6.conf

2. 配置hostapd和dhcpd


代碼如下:

sudo nano /etc/hostapd/hostapd.conf  

注意自己設置其中的無線熱點名稱ssid和認證密碼wpa_passphrase.

代碼如下:

interface=wlan0

driver=nl80211

ssid=YOUR_AP_NAME

hw_mode=g

channel=10

macaddr_acl=0

auth_algs=3

wpa=2

wpa_passphrase=YOUR_AP_PASSWORD

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP CCMP

rsn_pairwise=TKIP CCMP

sudo nano /etc/dhcp/dhcpd.conf

在末尾加入以下內容:

代碼如下:

subnet 192.168.0.0 netmask 255.255.255.0

{

range 192.168.0.2 192.168.0.10;

option routers 192.168.0.1;

option domain-name-servers 192.168.0.1,180.76.76.76,8.8.8.8;

}

其中180.76.76.76是網路公共DNS伺服器,8.8.8.8則是Google的DNS伺服器.

在自己的家目錄下創建一個hostapd目錄,裡面新建啟動和關閉腳本,比如我這樣寫(注意把裡面eechen換成你的用戶名):

代碼如下:

nano  /home/eechen/hostapd/ap-start.sh

代碼如下:

#!/bin/bash

# 開啟內核IP轉發

bash -c "echo 1 /proc/sys/net/ipv4/ip_forward"

# 開啟防火牆NAT轉發(如果本機使用eth0上網,則把ppp0改為eth0)

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# 關閉NetworkManager對無線網卡的控制

nmcli nm wifi off

# 設置並啟動無線網卡

ifconfig wlan0 192.168.0.1 netmask 255.255.255.0

# 解鎖無線設備,可以用rfkill list查看解鎖結果.

rfkill unblock wlan

# 睡眠6秒,待rfkill解鎖生效

sleep 6s

# 啟動dhcpd和hostapd,如果hostapd無法啟動請查看日誌hostapd.log,查看這兩個進程ps -ef|egrep "dhcpd|hostapd"

nohup hostapd /etc/hostapd/hostapd.conf /home/eechen/hostapd/hostapd.log 21

dhcpd wlan0 -pf /var/run/dhcpd.pid

ps -ef|head -n1 ps -ef|egrep "dhcpd|hostapd"

nano  /home/eechen/hostapd/ap-stop.sh

代碼如下:

#!/bin/bash

killall hostapd dhcpd

bash -c "echo 0 /proc/sys/net/ipv4/ip_forward"

ifconfig wlan0 down

3. 啟動hostapd和dhcpd

在桌面新建兩個啟動器(快捷方式),裡面分別填入:

代碼如下:

gksu /home/eechen/hostapd/ap-start.sh

gksu /home/eechen/hostapd/ap-stop.sh

因為腳本需要root用戶身份執行,所以需要用gksu運行。

注意:如果你開啟了ufw防火牆,ufw默認是禁止轉發的,這會導致防火牆NAT轉發失效,這時應該設置允許轉發:

代碼如下:

sudo nano /etc/default/ufw 將 DEFAULT_FORWARD_POLICY 設為 ACCEPT

然後重啟ufw即可:

代碼如下:

sudo service ufw restart

之後運行啟動器即可啟動和關閉AP無線熱點。

4. 用wireshark監控經過wlan0的通信

安裝wireshark(其中 eechen改為你的用戶名):

代碼如下:

sudo apt-get install wireshark

sudo chgrp eechen /usr/bin/mpcap

sudo chmod 750 /usr/bin/mpcap

sudo setcap cap_net_raw,cap_net_admin+eip /usr/bin/mpcap

Alt+F2運行wireshark,選擇網路介面wlan0,Filter里輸入http.cookie contains mail.qq.com

然後手機端登錄網頁QQ郵箱,在WireShark即可查看和獲取QQ郵箱登錄的Cookie,如圖所示:

右鍵點擊Cookie項把Value復制出來,然後用Firefox訪問站點https://w.mail.qq.com/,Alt+C激活 Original Cookie Injector( GreaseMonkey),彈出輸入框Wireshark Cookie Dump,把Cookie項的Value粘貼到裡面,然後點OK確定並刷新頁面即可登錄QQ郵箱。或者你使用Tamper Data這個Firefox擴展在提交時修改Cookie值也是可以的。

附:

查看連接wlan0網路的客戶端:

代碼如下:

sudo arp

返回IP地址和MAC硬體地址和無線介面名.

代碼如下:

iw dev wlan0 station mp

能顯示收發包和位元組數等.

查看網路介面速度:

代碼如下:

sar -n DEV 1

❻ centos7 怎麼重啟網路配置

1.首先找到網關:

打開虛擬機,「編輯」-「虛擬網路編輯器」,即可看到各個信息

(6)networkmanager源碼擴展閱讀:

閱讀全文

與networkmanager源碼相關的資料

熱點內容
debian系統命令行如何排序 瀏覽:406
車壓縮機保修幾年 瀏覽:307
linux同步腳本 瀏覽:664
福建新唐集成硬體加密 瀏覽:943
空調壓縮機被破壞 瀏覽:105
現在學php怎麼樣 瀏覽:90
linuxchttp下載 瀏覽:770
大數據虛擬機雲伺服器 瀏覽:57
java與嵌入式開發 瀏覽:20
minios如何搭建文件伺服器 瀏覽:1000
華為為啥有些壓縮包解壓不開 瀏覽:563
oracle可以編譯存儲嗎 瀏覽:475
機械男和女程序員創業 瀏覽:799
自己怎麼製作軟體app 瀏覽:214
javajson字元串轉java對象 瀏覽:230
必修一數學PDF 瀏覽:775
javascriptphpjsp 瀏覽:811
深圳一程序員退房完整版 瀏覽:295
後台管理app哪個好 瀏覽:766
加密鎖無模塊什麼意思 瀏覽:22