apt11.9.1

apt11.9.1

端末でコマンドを実行しapt-get、ソフトウェアセンターに何かをインストールしたい場合は、センターはapt-get完了するまで待つと言います。端末で同じことを行うことができるかどうか疑問に思います。つまり、apt-getロックが解除されるまでターミナルで待つことです。

私が見つけたこのリンクaptdconものをインストールするために使用されます。次のことを知りたいです。

  • 本当に使えないのでしょうかapt-get
  • aptdcon互換性がありますか?つまり、apt-getシステムを損傷せずにインストールするために両方を使用できますか?

答え1

apt11.9.1

この問題は解決しましたDebian のバグ #754103存在する今回提出してください。この修正は、1.9.11に更新された適切なバージョンに適用されます。

  • apt(8): ロック待機 (クローズ:#754103)

パラメータをまたはに設定して-o DPkg::Lock::Timeout=60このオプションを有効にできます。ロックを待つ時間(秒)はどこにありますか?aptapt-get60

apt -o DPkg::Lock::Timeout=60 install FOO
apt-get -o DPkg::Lock::Timeout=60 install FOO

2つの同じコマンドを実行し、最初のコマンドにすぐに応答しないことでこれをテストできます。Do you want to continue? [Y/n]? 2番目のコマンドを実行すると、次のメッセージが表示されます。

キャッシュロック待機中:ロックを取得できません/var/lib/dpkg/lock-frontend。プロセス 946299(apt) によって保持されます。

答え2

(次から再公開アクブンツ)

apt-get他の適切なタスクが完了するのを待つオプションが組み込まれています。

DPkg::Lock::Timeoutapt-getコマンドのタイムアウトを秒単位で設定するには、このオプションを使用します。この例では、60秒待ちます。

sudo apt-get -o DPkg::Lock::Timeout=60 install packagename

値を-1に設定すると、永遠に待機します。

sudo apt-get -o DPkg::Lock::Timeout=-1 install packagename

詳細については、次を参照してください。ハッキングされたbashスクリプトを使用せずに適切なロックを待ちます。。このオプションはapt-get2020年2月に追加されました

答え3

すでに次の操作を実行できます。

apt-get(apt-getのラッパー)という新しいスクリプトを作成します。

/usr/ローカル/sbin

ディレクトリには、次のbashコードが含まれています。

#!/bin/bash
#Make sure there is no space before the hashbang above!
i=0 
tput sc 
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
     case $(($i % 4)) in
         0 ) j="-" ;;
         1 ) j="\\" ;;
         2 ) j="|" ;;
         3 ) j="/" ;;
     esac
     tput rc
     echo -en "\r[$j] Waiting for other software managers to finish..." 
     sleep 0.5
     ((i=i+1)) 
done
/usr/bin/apt-get "$@"

実行可能にすることを忘れないでください。

sudo chmod +x /usr/local/sbin/apt-get

走る。シナプティックや他のapt-getを開いてもう一度実行してください。 ;)

/usr/local/sbinルートでより早く表示されます...

私の考えでは、これはどこかでスクリプトを台無しにすることができると思います...おそらく?

答え4

以前のバージョン(< 1.9.11)を使用している人にとっては、上記の方法が機能しない可能性があるため、ここに私のソリューションのハッキングバージョンがあります。

#!/bin/bash

timeout=12
wait_time=5
counter=0

while (( counter < timeout )); do
    if sudo apt install jq -y 2>/dev/null; then
        echo "jq installed successfully."
        exit 0
    else
        echo "Installation failed. Waiting for other software managers to finish..."
        sleep $wait_time
        ((counter++))
    fi
done

echo "Could not install jq within $((timeout * wait_time)) seconds. Skipping installation."

これも縮小版ですね

for i in {1..12}; do sudo apt install jq -y && exit 0 || sleep 5; done

関連情報