AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1386455
Accepted
Sun Bear
Sun Bear
Asked: 2022-01-11 20:26:38 +0800 CST2022-01-11 20:26:38 +0800 CST 2022-01-11 20:26:38 +0800 CST

Posso remover o pacote de revisão mais antigo de pacotes de snap duplicados?

  • 772

Ao examinar os pacotes snap que estão instalados em um sistema, notei que alguns pacotes têm uma duplicata, um com um número de revisão superior e o outro com um número de revisão mais recente. Para esses pacotes duplicados, minhas perguntas são:

  1. Por que eles são duplicados?
  2. Posso remover o pacote mais antigo para garantir um melhor gerenciamento de espaço em disco?
  3. Como removo o pacote mais antigo?

Abaixo estão exemplos de pacotes que possuem e não possuem duplicatas:

$ du -hcs /var/lib/snapd/snaps/*
31M /var/lib/snapd/snaps/2048x_3.snap
286M    /var/lib/snapd/snaps/atom_282.snap
4.0K    /var/lib/snapd/snaps/bare_5.snap
72M /var/lib/snapd/snaps/bitwarden_58.snap
72M /var/lib/snapd/snaps/bitwarden_59.snap
196M    /var/lib/snapd/snaps/blender_1113.snap
214M    /var/lib/snapd/snaps/blender_1237.snap
9.1M    /var/lib/snapd/snaps/canonical-livepatch_119.snap
9.1M    /var/lib/snapd/snaps/canonical-livepatch_126.snap
148M    /var/lib/snapd/snaps/chromium_1854.snap
148M    /var/lib/snapd/snaps/chromium_1864.snap
17M /var/lib/snapd/snaps/chromium-ffmpeg_23.snap
18M /var/lib/snapd/snaps/chromium-ffmpeg_24.snap
....

~$ ls -lh /var/lib/snapd/snaps/
total 12G
-rw------- 2 root root  31M Aug  5 06:23 2048x_3.snap
-rw------- 2 root root 286M Aug  5 08:35 atom_282.snap
-rw------- 2 root root 4.0K Sep 22 18:17 bare_5.snap
-rw------- 1 root root  72M Oct 30 00:20 bitwarden_58.snap
-rw------- 1 root root  72M Dec  9 04:28 bitwarden_59.snap
-rw------- 1 root root 196M Nov 18 04:06 blender_1113.snap
-rw------- 1 root root 214M Dec  4 09:39 blender_1237.snap
-rw------- 2 root root 9.1M Nov 17 21:06 canonical-livepatch_119.snap
-rw------- 2 root root 9.1M Nov 22 22:39 canonical-livepatch_126.snap
-rw------- 1 root root 148M Dec 16 04:28 chromium_1854.snap
-rw------- 1 root root 148M Jan  8 08:33 chromium_1864.snap
-rw------- 1 root root  17M Sep  3 06:29 chromium-ffmpeg_23.snap
-rw------- 2 root root  18M Nov 29 14:23 chromium-ffmpeg_24.snap
....

No sistema que estou analisando, o espaço total em disco utilizado /var/lib/snapd/snaps/*é de 12.180,248 MB. O espaço em disco de todos os pacotes duplicados (ou seja, revisões mais antigas do mesmo pacote) é de 4.163,1 MB. Resumindo, os pacotes de revisão mais antigos atualmente ocupam 34,18% dos 12.180,248 MB. Isso parece ser um custo para usar aplicativos SNAP que eu não havia percebido antes.

20.04
  • 3 3 respostas
  • 1112 Views

3 respostas

  • Voted
  1. Best Answer
    matigo
    2022-01-11T20:47:01+08:002022-01-11T20:47:01+08:00

    Para responder às suas perguntas:

    Por que eles são duplicados?

    ⇢ São diferentes revisões (versões), não duplicações.

    Posso remover o pacote mais antigo para garantir um melhor gerenciamento de espaço em disco?

    ⇢ Sim. É o seu computador, afinal.

    Como removo o pacote mais antigo?

    Você pode fazer isso no Terminal assim:

    snap remove {snap} --revision={revision}
    

    Você também pode dizer ao sistema quantas versões anteriores ele deve limitar-se assim:

    sudo snap set system refresh.retain=2
    

    Observação: o valor deve estar entre 2e 20e um número como 2ou 3geralmente é recomendado para economizar espaço de armazenamento e permitir uma reversão no caso de uma atualização incorreta.

    Se você quiser listar todos os snaps e suas versões , você pode executar este comando:

    snap list --all
    

    O que lhe dará algo como:

    Name                 Version                     Rev    Tracking         Publisher   Notes
    bare                 1.0                         5      latest/stable    canonical✓  base
    canonical-livepatch  10.0.1                      119    latest/stable    canonical✓  disabled
    canonical-livepatch  10.1.2                      126    latest/stable    canonical✓  -
    core                 16-2.52                     11798  latest/stable    canonical✓  core,disabled
    core                 16-2.52.1                   11993  latest/stable    canonical✓  core
    core18               20211028                    2253   latest/stable    canonical✓  base
    core18               20211015                    2246   latest/stable    canonical✓  base,disabled
    core20               20211115                    1242   latest/stable    canonical✓  base,disabled
    core20               20211129                    1270   latest/stable    canonical✓  base
    gnome-3-28-1804      3.28.0-19-g98f9e67.98f9e67  145    latest/stable    canonical✓  disabled
    gnome-3-28-1804      3.28.0-19-g98f9e67.98f9e67  161    latest/stable    canonical✓  -
    gnome-3-34-1804      0+git.3556cb3               77     latest/stable/…  canonical✓  -
    gnome-3-34-1804      0+git.3556cb3               72     latest/stable/…  canonical✓  disabled
    gnome-3-38-2004      0+git.cd626d1               87     latest/stable    canonical✓  -
    gnome-3-38-2004      0+git.6ba6040               76     latest/stable    canonical✓  disabled
    gtk-common-themes    0.1-52-gb92ac40             1515   latest/stable/…  canonical✓  disabled
    gtk-common-themes    0.1-59-g7bca6ae             1519   latest/stable/…  canonical✓  -
    snap-store           3.38.0-66-gbd5b8f7          558    latest/stable/…  canonical✓  -
    snap-store           3.38.0-64-g23c4c77          547    latest/stable/…  canonical✓  disabled
    snapd                2.53.2                      14066  latest/stable    canonical✓  snapd,disabled
    snapd                2.53.4                      14295  latest/stable    canonical✓  snapd
    

    Precisa de um roteiro?

    IMPORTANTE: Você vai querer verificar a saída de snap list --allno seu computador antes de continuar, e o seguinte é um script que não deve ser copiado/colado sem verificação de sanidade se você estiver usando uma localidade que não seja en_US.UTF-8 .

    O roteiro:

    #!/bin/bash
    # This script will remove disabled snap revisions.
    set -eu
    
    LANG=C snap list --all | awk '/disabled/{print $1, $3}' |
        while read name rev; do
            snap remove "$name" --revision="$rev"
        done
    

    Isso executará snap list -alle extrairá as linhas que contêm a palavra disabled. Isso será diferente dependendo da sua localidade, portanto, verifique primeiro a saída da função e, em seguida, atualize awk '/disabled/para substituir disabledpelo rótulo encontrado em sua saída.

    Salve o script em um arquivo (por exemplo scrub-snaps.sh) e defina-o como executável:

    sudo chmod +x scrub-snaps.sh
    

    Agora você pode executá-lo, lembrando de usar sudo:

    sudo ./scrub-snaps.sh
    

    Obs: sudo não fazia parte do script, mas pode ser adicionado caso prefira tê-lo lá. De qualquer forma, você será solicitado a fornecer uma senha, se necessário.

    • 11
  2. user535733
    2022-01-11T21:17:45+08:002022-01-11T21:17:45+08:00

    Manter pelo menos uma versão mais antiga de um snap é inerente ao design.

    Os pacotes Snap foram originalmente projetados para uma variedade de ambientes onde geralmente não há administrador humano e/ou nenhuma maneira de conectar um teclado e um monitor... como telefones ou dispositivos IOT. A resiliência é um requisito crítico para esses sistemas: se um aplicativo travar ou uma atualização for corrompida, será necessária alguma forma de reversão garantida sem intervenção humana. Daí a exigência de pelo menos uma versão mais antiga disponível.

    As pessoas em desktops e servidores clássicos não se importam muito com esse recurso de reversão. Eles gostam de diferentes elementos de design de snap: as atualizações automáticas seguras que são independentes do sistema operacional, a prevenção de adulteração squashfs somente leitura, o confinamento do processo etc.

    Mas é tudo um único padrão, então você também obtém o recurso de reversão. Mesmo que você ache que não vai usar.

    Você não pode "desativar" a capacidade de reversão de snaps - não é realmente um "recurso", mas um elemento-chave de design.

    • 7
  3. Sun Bear
    2022-01-12T07:53:07+08:002022-01-12T07:53:07+08:00

    Com base na resposta @matigo, escrevi um script python para automatizar a remoção de pacotes SNAP desabilitados. Ele permite que um usuário verifique visualmente os pacotes de snap antes de prosseguir (ou não) com o processo de remoção. Um exemplo do que o script executado faz é mostrado no link.

    remove_disabled_snap_pkgs.py

    #!/bin/python3
    ''' This python script automates the removal of all disabled SNAP packages in
    a system. Doing so helps free up the system's disk space. This outcome can be
    significant in the situation where many disabled SNAP packages are retained in
    the system.
    '''
    from subprocess import run, PIPE, CalledProcessError
    from pathlib import Path
    import sys
    
    # Assumptions
    SNAP_PKGS_PATH = Path('/var/lib/snapd/snaps/')
    # Also, at a minimum, this directory has at least one xxx.snap file there. 
    
    
    def snap_list():
        '''Function to execute a bash 'snap list' cmd and returns a Python
        dictionary of info of the ACTIVE SNAPCRAFT pkgs in the system.
    
        pkgs_dict = {Name : {'Version':'xxx', 'Rev':'xxx', 'Tracking':'xxx',
                             'Publisher':'xxx', 'Notes':'xxx'}
                    }
        '''
        try:
            cmd = ['snap', 'list']
            completed = run(cmd, check=True, stdout=PIPE)
        except CalledProcessError as err:
            print('ERROR:', err)
        else:
            headers = completed.stdout.decode('utf-8').splitlines()[0].split()
            pkgs=[line.split() for line in
                  completed.stdout.decode('utf-8').splitlines()[1:]]
            pkgs_dict = {}
            for pkg in pkgs:
                pkgs_dict[pkg[0]] = {i:pkg[n+1] for n, i in enumerate(headers[1:])}
            return pkgs_dict
    
    
    # 1. Get all SNAPCRAFT pkgs in system
    all_path = sorted(SNAP_PKGS_PATH.glob('*.snap'))
    all_size = sum([p.stat().st_size for p in all_path])
    
    # 2. Get active SNAPCRAFT pkgs in system
    active_snap_pkgs = snap_list()
    active_path = [SNAP_PKGS_PATH / Path(k+'_'+v['Rev']+'.snap')
                   for k, v in active_snap_pkgs.items()]
    active_size = sum([p.stat().st_size for p in active_path])
    
    # 3. Display info and instructions in terminal
    print(f'ALL (ACTIVE & DISABLED) SNAP PACKAGES IN SYSTEM:')
    for n, i in enumerate(all_path):
        size = i.stat().st_size
        if i in active_path:
            print(f'Active\t{size:>12}\t{i}')
        else:
            print(f'      \t{size:>12}\t{i}')
    
    # 4. Show stats on total size of All, Active & Disabled SNAPCRAFT packages 
    width = 12
    disabled_size = all_size - active_size
    print('\nSIZE OF SNAP PACKAGES:')
    print(f'1. All      : {all_size:>{width}} bytes')
    print(f'2. Active   : {active_size:>{width}} bytes')
    print(f'2. Disabled : {disabled_size:>{width}} bytes or '
          f'{(disabled_size/all_size):.2%} of All')
    
    # 5. Make decision to remove or not to remove Disabled SNAPCRAFT packages 
    if disabled_size > 0:
        print(f'\nREMOVE ALL DISABLED SNAP PACKAGES? [y/n]')
        while True:
            decision = input()
            if decision in ['y', 'Y', 'yes', 'Yes', 'YES']:
                print('Removal in progress... pls wait')
                for p in all_path:
                    if p not in active_path:
                        stem = p.stem
                        bar_index = stem.index('_')
                        name = stem[:bar_index]
                        revision = stem[bar_index+1:]
                        cmd = ['sudo', 'snap', 'remove', name,
                               '--revision='+revision]
                        print(f"\n{' '.join(cmd)}")
                        run(cmd, stdout=sys.stdout, stderr=sys.stderr,
                            encoding='utf8')
                print(f'\nREMOVE ALL DISABLED SNAP PACKAGES? COMPLETED.')
                break
            elif decision in ['n', 'N', 'no', 'No', 'NO']:
                print(f'\nNO REMOVAL IS PERFORMED.')
                break
            else:
                print('Please enter only "y" or "n":')
    else:
        print(f'\nNO REMOVAL IS NEEDED.')
    
    • 2

relate perguntas

  • Como posso configurar a resolução de domínio curinga local (127.0.0.1) em 18.04..20.04?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve