在FreeBSD jail 里安裝啟動Ubuntu jammy系統,每次裝好執行jexec ubjammy sh進入Ubuntu系統后,執行apt update報錯。?這個問題困惑了好久,突然有一天仔細去看報錯信息,查看了(man 5 apt.conf) ,才搞定問題。簡單來說就是把apt的配置里APT::Cache-Start調大就行,但是一開始由于不明白原理,所以走了彎路。
最簡單的操作就是這篇文檔里的方法:https://blog.csdn.net/skywalk8163/article/details/140383232
?這里把處理步驟、彎路,更詳細的記錄下來:
問題:apt update升級報錯
?apt full-upgrade
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
Reading package lists... Error!
E: Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. Current value: 25165824. (man 5 apt.conf)
E: Error occurred while processing libsurgescript0.5.4.4 (NewVersion1)
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_jammy_universe_binary-amd64_Packages
E: The package lists or status file could not be parsed or opened.
文心一言的回答
?
錯誤信息表明你的APT緩存空間不足,并且出現了與libsurgescript0.5.4.4
軟件包相關的合并列表(MergeList)問題。以下是一些建議的步驟來解決這個問題:
-
增加APT緩存大小
打開你的/etc/apt/apt.conf
或/etc/apt/apt.conf.d/50user
(或其他以.conf
結尾的文件在/etc/apt/apt.conf.d/
目錄下),然后增加或修改APT::Cache-Limit
的值。不過,錯誤中提到的是APT::Cache-Start
,但通常我們修改的是APT::Cache-Limit
。以下是一個例子,將緩存大小增加到500MB(512 * 1024 * 1024 字節):echo 'APT::Cache-Limit "524288000";' | sudo tee -a /etc/apt/apt.conf.d/99cachelimit
注意:如果你已經有一個
APT::Cache-Limit
的設置,請確保新值大于當前值。 -
修復損壞的列表
由于提到了MergeList
問題,你可能需要清理并重新生成軟件包列表。可以使用以下命令:sudo apt clean sudo rm -rf /var/lib/apt/lists/* sudo apt update
這些命令會清除現有的列表,并重新從軟件源下載。 -
檢查軟件源
錯誤中還提到了archive.ubuntu.com_ubuntu_dists_jammy_universe_binary-amd64_Packages
,這通常是Ubuntu的軟件源。確保你的/etc/apt/sources.list
和/etc/apt/sources.list.d/*
中的軟件源是正確的,并且對于Jammy版本是有效的。 -
檢查第三方軟件包
libsurgescript0.5.4.4
可能是一個第三方軟件包,不屬于Ubuntu的官方倉庫。如果你從非官方源安裝了它,請確保該源是可靠的,并且該軟件包與你的Ubuntu版本兼容。 -
手動下載并安裝軟件包
如果以上步驟都無法解決問題,并且你確定需要libsurgescript0.5.4.4
軟件包,你可以嘗試從其官方網站或其他可信來源手動下載DEB包,并使用dpkg
進行安裝。但請注意,這可能會帶來依賴問題,所以通常最好使用APT來管理軟件包。 -
查看系統日志
使用journalctl
或查看/var/log/syslog
(或/var/log/apt/history.log
)可能會提供更多關于錯誤的詳細信息。 -
重啟服務或系統
有時簡單的重啟APT服務(通常是systemctl restart apt.service
,但APT通常沒有單獨的服務)或整個系統可以解決一些臨時問題。但請注意,這通常不是解決根本問題的方法。
希望這些建議能幫助你解決問題!
?嘗試修復
先執行這個試試
echo 'APT::Cache-Limit "524288000";' | tee -a /etc/apt/apt.conf.d/99cachelimit
不行
APT::Cache-Start
echo 'APT::APT::Cache-Start "524288000";' | tee -a /etc/apt/apt.conf.d/99cachelimit
刪除?rm -rf /var/lib/apt/lists
不行
嘗試配置Cache-Limit和Cache-Grow
事實證明光修改Cache-Limit和Cache-Grow不行:
echo 'APT::Cache-Limit "0";' > /etc/apt/apt.conf.d/99cachelimitecho 'APT::Cache-Grow "16777216";' >>/etc/apt/apt.conf.d/99cachelimit
最終還是靠修改Cache-Start搞定:
echo 'APT::Cache-Start "67108864";' > /etc/apt/apt.conf.d/99cachelimit
注意如果使用重定向符號>> ,如果后面直接跟文件名字的話,空格也會成為名字的一部分。
總結
這個問題很久沒有解決,主要是沒有仔細看報錯信息,沒有弄明白報錯信息里的?Cache-Start 的設定方法。
因為是jail里的ubuntu,所以沒有vi ,文心一言給的命令也需要修改才能執行,導致走了彎路。
其實核心思想,就是在apt配置目錄里/etc/apt/apt.conf.d/,隨便寫一個文件,比如99cachelimit ,文件里加上APT::Cache-Start "67108864";這句話就行了。這樣就把Cache-Start值調為64M了。