1、前言
- 第一篇:使用linuxdeployqt軟件生成
- 第二篇:桌面文件.desktop,文件編寫與軟件圖標(biāo)
- 第三篇:打包生成安裝的包(.deb)
記得之前 學(xué)會了使用linuxdeployqt軟件生成,打包,已經(jīng)安裝等各種細(xì)節(jié),使用一個“test demo” 工程樣例,來實現(xiàn)以及說明相關(guān)操作流程。但是后在使用的時候,發(fā)現(xiàn)使用apt-get install 安裝一些軟件的時候,dpkg報了錯誤。就是受到了樣例工程影響,本次為記錄相關(guān)方式,以及自己努力方式。
2、實驗環(huán)境
實驗環(huán)境還是挺重要的,因為有時候,在你電腦上能運(yùn)行的東西,在別人的電腦就不一定能運(yùn)行,這一部分的原因就可能是實驗版本不一樣,另外也發(fā)現(xiàn)其他小伙伴,也會問些問題,之前有人大致環(huán)境裝的和我差不多,當(dāng)時是win的環(huán)境,結(jié)果編譯遇到問題,就跑過來問是不是環(huán)境不對,這還是要具體問題具體分析的,當(dāng)時看了看,發(fā)現(xiàn)是其他問題,總的來說,環(huán)境還是挺重要的。
系統(tǒng)環(huán)境:
環(huán)境問題還是要注意下的,不同環(huán)境下可能還真的可能不一樣。
QT軟件版本環(huán)境: Linux qt環(huán)境
3、問題說明
如下圖所示,在安裝一個包名為“v4l-utils” 的視頻捕捉相關(guān)設(shè)備的時候,報錯如下。
robot@robot-xxx:~/Downloads$ sudo apt install v4l-utils -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libv4l2rds0
The following packages will be REMOVED:
test
The following NEW packages will be installed:
libv4l2rds0 v4l-utils
0 upgraded, 2 newly installed, 1 to remove and 116 not upgraded.
1 not fully installed or removed.
Need to get 0 B/602 kB of archives.
After this operation, 1,750 kB of additional disk space will be used.
(Reading database ... 299473 files and directories currently installed.)
Removing test (0.1.0) ...
rm: cannot remove '/usr/share/applications/test1_hello.desktop': No such file or
directory
rm: cannot remove '/root/Desktop/test1_hello.desktop': No such file or directory
dpkg: error processing package test (--remove):
installed test package post-removal script subprocess returned error exit status 1
dpkg: too many errors, stopping
Errors were encountered while processing:
test
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)
看習(xí)慣了Linux相關(guān)問題后,漸漸能夠理解哪部分使我們需要內(nèi)容了,主要是下內(nèi)容。
rm: cannot remove '/usr/share/applications/test1_hello.desktop': No such file or
directory
rm: cannot remove '/root/Desktop/test1_hello.desktop': No such file or directory
dpkg: error processing package test (--remove):
installed test package post-removal script subprocess returned error exit status 1
dpkg: too many errors, stopping
Errors were encountered while processing:
test
Processing was halted because there were too many errors.
E: Sub-process /usr/bin/dpkg returned an error code (1)
上述問題主要是我們之前的demo test工程,有兩個文件移除失敗,到時dpkg錯誤太多,無法運(yùn)行。
這個問題出現(xiàn)在嘗試使用apt或dpkg安裝、更新或移除軟件包時。具體來說,當(dāng)嘗試安裝v4l-utils軟件包時,apt也嘗試移除名為test的軟件包。在移除test軟件包的過程中,其postrm(post-removal script)腳本遇到了錯誤,因為它試圖刪除不存在的文件(/usr/share/applications/test1_hello.desktop和/root/Desktop/test1_hello.desktop),導(dǎo)致腳本返回了錯誤狀態(tài)1,從而使整個處理過程中斷。
4、我的努力與查到解決的方式
(1)補(bǔ)充兩個文件,讓軟件正常執(zhí)行
既然大致理解了,出現(xiàn)問題的原因,那么移除兩個文件失敗,首先就是能想到的,假裝這兩個文件,補(bǔ)充其全這兩個文件,然后正常執(zhí)行刪除流程。
實際在對應(yīng)位置嘗試了
/usr/share/applications/
/root/Desktop/
創(chuàng)建文件命令如下
sudo vim test1_hello.desktop
在目錄創(chuàng)建后,確實解決了此問題。
/usr/share/applications/test1_hello.desktop
但是如下目錄卻有些問題,實際自己發(fā)現(xiàn)沒有這個目錄,并且要是進(jìn)入此目錄,需要進(jìn)入su模式。
/root/Desktop/test1_hello.desktop
嘗試過后,此方式并沒有解決。
(2)嘗試修復(fù)dpkg狀態(tài)
1、使用如下命令,這個命令嘗試強(qiáng)制移除test軟件包,即使它的狀態(tài)被標(biāo)記為重新安裝請求(reinstreq)。
sudo dpkg --remove --force-remove-reinstreq test
2、清理和更新軟件包狀態(tài)
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get update
3、之后再次嘗試安裝軟件
sudo apt-get install v4l-utils -y
發(fā)現(xiàn)依然不行。
(3)網(wǎng)上的查到解法-修復(fù)。
主要是使用如下兩個命令,
dpkg-reconfigure -a
apt-get -f install
兩個命令解釋如下。
命令:dpkg-reconfigure -a
- dpkg-reconfigure 是一個用于重新配置一個已安裝的包的命令。如果某個軟件包在安裝時有配置步驟,使用 dpkg-reconfigure 可以重新啟動這些配置步驟,讓用戶可以更改之前的選擇。
- -a 選項告訴 dpkg-reconfigure 命令重新配置所有已安裝的包。這個操作可能會非常耗時,因為它會遍歷系統(tǒng)上所有已安裝的包,并且對于那些有配置選項的包,會重新啟動其配置過程。
- 這個命令通常在包的默認(rèn)配置需要修改,或者在一些特殊情況下,如配置文件損壞或更改后需要還原時使用。
命令:apt-get -f install
- apt-get 是Debian及其衍生系統(tǒng)中的軟件包管理工具,用于安裝、更新、升級和刪除軟件包。
- -f 選項,也就是 --fix-broken 的簡寫,用于修復(fù)因依賴關(guān)系問題而未能正確安裝的包。這個命令會嘗試自動修復(fù)這些問題,通過安裝缺失的依賴、重新配置包或者在必要時刪除有問題的包來達(dá)到這個目的。
- install 沒有緊隨包名時,意味著 apt-get -f install 將不會安裝新的軟件包,而是專注于修復(fù)現(xiàn)有的軟件包安裝問題。
如下是參考連接,可能因為網(wǎng)絡(luò)限制無法訪問。
https://askubuntu.com/questions/603493/apt-get-dependency-issue-open-ssh-client
嘗試后發(fā)現(xiàn)以下方式也不行。
5、解決方式-致謝
最后參照了CSDN上的方式,這種方式解決的,自己理解是刪除了相關(guān)記錄的文件。
參考文章:https://blog.csdn.net/qq_39029221/article/details/120193413
命令:
sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
sudo mkdir /var/lib/dpkg/info/
sudo apt-get update
sudo apt-get -f install
6、補(bǔ)充-postrm文件寫法
如下是之前參考第三章里的連接。
之前為了方便porstrm我們寫的比較方便,但是它其實是postinst的逆過程,我們將postrm里內(nèi)容更新,不再出上述錯誤。
#!/bin/sh
# 刪除應(yīng)用程序啟動器目錄中的.desktop文件
rm -f /usr/share/applications/test-my-demo.desktop
# 嘗試刪除當(dāng)前用戶的桌面目錄中的.desktop文件
DESKTOP_DIR="$HOME/Desktop"
if [ -f "$DESKTOP_DIR/test-my-demo.desktop" ]; then
rm -f "$DESKTOP_DIR/test-my-demo.desktop"
fi
# 嘗試刪除其他可能的位置中的.desktop文件
# 注意:在卸載包時,$SUDO_USER可能不會被正確設(shè)置,特別是在圖形界面下的卸載過程中
# 如果可能,嘗試檢測并刪除所有潛在用戶桌面上的文件
# 刪除 /home 下所有用戶桌面目錄中的.desktop文件
for dir in /home/*; do
if [ -d "$dir/Desktop" ] && [ -f "$dir/Desktop/test-my-demo.desktop" ]; then
rm -f "$dir/Desktop/test-my-demo.desktop"
fi
done
# 如果是以root用戶運(yùn)行,嘗試刪除root的桌面目錄中的.desktop文件
if [ -f "/root/Desktop/test-my-demo.desktop" ]; then
rm -f "/root/Desktop/test-my-demo.desktop"
fi
exit 0
注意點:文章來源:http://www.zghlxwxcb.cn/news/detail-851736.html
- 權(quán)限問題:確保postrm腳本有適當(dāng)?shù)臋?quán)限執(zhí)行刪除操作。這可能需要軟件包在卸載時具有root權(quán)限。
- 用戶目錄的處理:由于 H O M E 和 HOME和 HOME和SUDO_USER在postrm腳本中可能不可靠,特別是在圖形界面環(huán)境下,腳本嘗試遍歷/home/*目錄來尋找所有用戶的桌面目錄并嘗試刪除.desktop文件。這種方法可能會刪除多個用戶的桌面快捷方式,需要謹(jǐn)慎使用。
- 桌面目錄的存在性:腳本檢查桌面目錄是否存在,并且.desktop文件是否真的在那里,然后才進(jìn)行刪除操作。
- 錯誤處理:使用-f選項調(diào)用rm以避免因文件不存在而產(chǎn)生錯誤信息。
- 這個postrm腳本是一個基礎(chǔ)的實現(xiàn),根據(jù)實際情況可能需要進(jìn)一步的定制化。特別是對于多用戶環(huán)境,可能需要更細(xì)致地處理每個用戶的情況。
7、總結(jié)
細(xì)微之處還不能全部理解,一點點踩坑多使用。文章來源地址http://www.zghlxwxcb.cn/news/detail-851736.html
到了這里,關(guān)于【Linux下qt軟件安裝打包附帶問題: dpkg: error processing package xxxx +解決方式+自我嘗試+記錄】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!