web-dev-qa-db-ja.com

ローカルリポジトリから同じパッケージの古いバージョンを削除する方法は?

私のローカルリポジトリ 下記参照、同じパッケージの多くのバージョンをダウンロードしてdebパッケージディレクトリに保存しています。 Ubuntuは常に最新バージョンを使用することを好むため、以前のバージョンをダウンロードして使用する必要はありません。 (すべて同じフォルダーにあります)。

ローカルdebのフォルダーからパッケージの以前のバージョンを削除するにはどうすればよいですか?それらを手動で削除するのは現実的な解決策ではありません。 (数千のファイルのバージョンを調べることはできません)

何か案は?!!

たぶん、各パッケージのバージョンをチェックして新しいバージョンを保持し、古いバージョンを削除するスクリプトは、この問題を解決できます。

私はそのようなスクリプトを探しています、またはいくつかのソフトウェアが設立されたら素晴らしいでしょう

このチュートリアルの方法 に従ってローカルリポジトリを作成しました。

***ローカルリポジトリは、既にダウンロードされたパッケージのオフラインストレージであるため、再度ダウンロードする必要はありません)

:ダウンロードしたパッケージのキャッシュをクリアすることではありません。これは、apt-get cleanコマンドで実行できます。

4
user61928

これに続いて、同じパッケージの古いバージョンを削除しました。 dpkg-scanpackagesの複数バージョンスキャン機能の機能の反転を使用しました。

  1. 最初にdpkg-devパッケージをインストールします

    Sudo apt-get install dpkg-dev
    
  2. 次に、dpkg-scanpackagesオプションを指定せずに、パッケージの名前(新しい方のみが表示されます)-mでファイルを生成します。デフォルトは-mオプションなしです。

    debという名前のフォルダーに.debファイルがある場合、このフォルダーの親から以下のコマンドを実行します

    dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: > filenames
    

    これにより、すべての.debファイルの名前がFilename: deb/packagename_version.debの形式でリストされているfilenamesという名前のファイルが作成されます。

    filenamesという名前のファイルに、最新バージョンのファイル名がすべて含まれるようになりました。

  3. タスクは簡単になりました。スクリプトを変更して、これらのファイルをすべて別のフォルダーに移動します。

    1. 最初にFilename:mvに置き換えます

      sed -i 's/Filename:/mv/' filenames
      
    2. 次に、親ディレクトリdeb folderにフォルダーを作成します。私はそれに名前を付けましたnewest(ジャンクフリーは良いものかもしれません; P)。

    3. 再度filenamesファイルを変更して、新しく作成されたnewestフォルダー内の.debファイルを移動します。

      sed -i 's/\.deb/.deb newest/' filenames
      

      これにより、filenames fileが.debファイルをdebディレクトリからnewestディレクトリに移動するmvコマンドのリストになります

    4. 今何を推測します。ファイルを実行しますfilenames

      sh filenames
      
    5. 最後のステップは、古い廃止された.debファイルがあるフォルダーを削除することです。予防措置として最新のフォルダも確認してください。

1つのライナーで更新する

dpkg-devパッケージをインストールした後、単一のコマンドで移動スクリプトを生成し、.debファイルのフォルダーの親に移動してこのスクリプトを使用します。

 dpkg-scanpackages deb /dev/null 2>/dev/null | grep Filename: | sed 's/Filename:/mv/;s/\.deb/.deb newest/' > filenames

次に、newestという名前のフォルダーを作成し、 `sh filenames *コマンドでfilenamesというファイルを実行します。

5
Anwar

私は同じ問題を抱えていました。apt-mirrorを使用してローカルリポジトリを作成し、このツールは新しいパッケージをダウンロードしますが、古いパッケージはすべてそのまま残します。ローカルミラーをクリーンアップするために、次のことを行いました。

  1. ミラーの一番上の場所に移動します(私のセットアップの/var/spool/apt-mirror/mirror/ftp.nl.debian.org/debianでdistsとプールディレクトリが置かれているディレクトリ)

  2. プール内のすべてのパッケージのリストを作成します。

    find pool -type f | sort -u > files
    
  3. ミラー化されたディストリビューションのすべてのパッケージのリストを作成します。

    grep "^Filename:" `find dists/ -name Packages`|sed "s/^.*Filename: //"|sort -u > packages
    
  4. 次に、2つのファイルの差分を作成し、クリーンアップスクリプトに変換します。

    diff files packages | sed "/^[1-9]/d;s/^< /rm /" > cleanup.sh
    
  5. 生成されたスクリプトを実行する

リポジトリに書き込み権限があることを確認します(またはSudoを使用して実行します)。削除する代わりに、ファイルを一時的な場所に移動することもできます。

この背後にある考え方は、Packagesファイルのいずれにも記載されていないファイルを削除できることです。これらのファイルは新しいバージョンに置き換えられるか、非推奨になります。パッケージファイルにファイルが記載されていない場合、リポジトリに接続しているクライアントはそれらを見つけることができません。

2
Borkhuis

ライナーを1つ削除して削除する(移動しない)

この1つのライナーは、同じパッケージの古いバージョンのみを削除します

ルートとして実行

Sudo dpkg-scanpackages /var/cache/apt/archives 2>&1 >/dev/null | grep -Po '((\/.*?deb)(?=.*?repeat;))|used that.*?\K(\/.*deb)' | xargs rm

「/ var/cache/apt/archives」は.debディレクトリに置き換えます

ubuntu 12.10で非常にうまく機能します

2
Gurjinder Singh

「Anwar」からの素敵な回避策(最初の回答)!私が変更するこの行のみ:

sed -i 's/\.deb/.deb newest/' filenames

packagename.debian_123.debという名前のパッケージがある場合、この行の最初の「.deb」のみが行に置き換えられ、最終的には次のようになります。

packagename.deb newest_123.deb

代わりに次の行を使用すると、すべての行の最後の.debのみが置き換えられます。

sed -i 's/\(.*\).deb/\1.deb newest/' filenames
0
feuerkogel

Thunarの場合:

  1. /var/cache/apt/archivesを開きます
  2. アクセス時間に基づいてファイルを選択:
    • [表示] >> [詳細リストとして表示]をクリックします
    • [表示] >> [列の構成] >> [アクセス日を有効にする]をクリックします
    • date Accessedテーブルヘッダーをクリックして、ファイルを並べ替えます
    • ctrlキーを押しながらクリックして複数のファイルを選択し、Shiftキーを押しながらクリックしてファイルの範囲を選択します
  3. ファイルを削除するには、右クリック>>削除(Thunarが十分な特権で開かれた場合)または:
    • 右クリック>>名前変更を選択
    • 挿入/上書きを選択し、カスタムプレフィックスを設定します
    • ターミナルを開く、Sudo rm /var/cache/apt/archives/customprefix*.deb
0
ignis