Yalnızca güvenlik güncelleştirmelerini komut satırından nasıl yükleyebilirim?


333

sudo apt-get upgradeyalnızca güvenlik güncelleştirmelerini değil tüm güncelleştirmeleri yükler. Update Manager'ı yalnızca önemli güvenlik güncellemelerini seçmek için kullanabileceğimi biliyorum, ancak bunu komut satırından yapmanın bir yolu var mı?


2
Sanmıyorum dis-upgrade tüm sistemi yeni bir sürüme götürür. Güncelleme Yöneticisi’nde gördüğünüzler gibi günlük güncellemelerden bahsediyorum.
Michael Crenshaw,

1
Şimdi ne dediğini anlıyorum. Heh, apt-get update'i çok sık çalıştırıyorum, düşünmeden yazıyorum. Söylediğin için teşekkürler!
Michael Crenshaw

7
"Apt-get dist-upgrade" değil, "apt-get upgrade" değil. "dist-upgrade" yeni sürümler için değildir (bu, "release-update-upgrade" ayrı bir komuttur). "Dist-upgrade" kullanmak, yeni paketlerin değişen bağımlılıklarını idare edeceği anlamına gelir. Bu önemli olabilir.
Kees Cook

3
dist-upgrade, Update Manager GUI tarafından gerçekleştirilen normal işlemdir. linux-image-genericMevcut görüntüye bağlı olarak bir paketin bulunduğu çekirdek gibi paketler için , örneğin linux-image-3.x.y-zz-generic(her biri ayrı bir paket adıdır), dağıtım (bağımlılıkların giderilmesi için yeni paketlerin kurulmasına izin veren) yükseltme , yükseltme ise çekirdek paketini yedek olarak gösterecektir.
12'de kronit

3
apt-getHer sunucuda ne kadar belirgin bir şekilde listelendiğini düşünürsek, bunun için iyi bir temelli cevap bulunmaması şaşırtıcıdır
Karthik T

Yanıtlar:


308

Katılımsız yükseltmeler paketi , güvenlik güncelleştirmelerini otomatik olarak yükleme işlevi sağlar.

Bunu kullanabilirsiniz, ancak otomatik kısmı yapılandırmak yerine manuel olarak çağırabilirsiniz:

sudo unattended-upgrade -d --dry-run
sudo unattended-upgrade -d

Bunun yerine sessizce çalıştırmak istiyorsanız:

sudo unattended-upgrade

NOT: Katılımsız yükseltme çağrıldığında "s" harflerini sonlandırın.

Bu, paketin muhtemelen olduğu gibi varsayılan olarak yüklendiğini varsayar. Değilse, sadece yapın:

sudo apt-get install unattended-upgrades

Ayrıca bakınız /usr/share/doc/unattended-upgrades/README.md.


Otomatik yürütülmesini devre dışı bırakılması için unattended-upgradesize muhtemelen değiştirmeye gerek vardır /etc/cron.daily/apt, ama emin değilim bunu yapmak için "doğru" olduğunu
Jaime Hablutzel

yan not: Ubuntu 12.04.5 LTS sunucusu için unattended-upgradesvarsayılan olarak kurulmaz.
Raptor

13
Bunu komut satırından yaptığınızdan, -vbilgi mesajları veya -dhata ayıklama mesajları için kullanın . Aksi halde, yardımcı program çok sessiz olacaktır; bu durumda girişleri kontrol etmeniz gerekir /var/log/unattended-upgrades. Aynı zamanda bir --dry-runşeyi simüle etmek için kullanabilirsiniz , ancak aslında hiçbir şeyi yükseltme. Daha fazla bilgi ve diğer seçenekler --helpiçin yardım mesajını almak için kullanın .
ADTC

unattended-upgradesbugün hakkında birkaç şey öğrendim . Teşekkürler!
19'da

"Nasıl gittiğini izlemek için", sadece etkileşimli olmayan mesajların hatalarını ayıklamak değil mi?
Kova Gücü,

116

Güncelleştirmeleri Yönetme Konusunda Birkaç Püf Nokta

Bu, hem Debian hem de Ubuntu için geçerlidir, ancak Ubuntu'nun izleyeceği daha özel talimatlar.

  • Yalnızca güvenlik güncellemelerini göster:

    apt-get -s dist-upgrade |grep "^Inst" |grep -i securi 
    

    veya

    sudo unattended-upgrade --dry-run -d
    

    veya

    /usr/lib/update-notifier/apt-check -p
    
  • Tüm yükseltilebilir paketleri göster

    apt-get -s dist-upgrade | grep "^Inst"
    
  • Yalnızca güvenlik güncelleştirmelerini yükle

    apt-get -s dist-upgrade | grep "^Inst" | 
        grep -i securi | awk -F " " {'print $2'} | 
        xargs apt-get install
    

Notlar:

  • Bazen Ubuntu güvenlik güncellemelerini $ release-updates deposundan geliyor gibi gösterir. Bu söylendi, çünkü Ubuntu geliştiricileri güvenlik güncellemelerini kullanılabilirliklerini hızlandırmak için $ release-update deposuna zorluyorlar.

    Bu durumda, yalnızca güvenlik güncellemelerini göstermek için aşağıdakileri yapabilirsiniz:

    sudo sh -c 'grep ^deb /etc/apt/sources.list | 
        grep security > /etc/apt/sources.security.only.list'
    

    ve

    apt-get -s dist-upgrade -o Dir::Etc::SourceList=/etc/apt/sources.security.only.list -o Dir::Etc::SourceParts=/dev/null  | 
        grep "^Inst" | awk -F " " {'print $2'}
    
  • Paket yükseltmelerinden sonra hangi hizmetlerin yeniden başlatılması gerektiğini kontrol edin. Hangi paketleri önceden yükselteceğinize karar verin ve yeniden başlatma / yeniden başlatma işlemlerinizi zamanlayın. Buradaki sorun, bir hizmeti yeniden başlatmadığınız sürece, bir güvenlik açığını veya başka bir şeyi düzelten yeni bir paket yüklemeden önce, belleğe yüklenen bir kitaplığın daha eski bir sürümünü kullanıyor olabilir.

    checkrestart -v
    

    Ancak, checkrestartmutlaka yeniden başlatılmaması gereken işlemleri listeleyebileceğini unutmayın . Örneğin, PostgreSQL servisi hafızasında, silinmiş bir xlog dosyasına gönderme yapıyor olabilir; bu da servisi yeniden başlatmak için geçerli bir neden değil.

    Bu nedenle, standart utils kullanarak bunu kontrol etmenin başka bir daha güvenilir yolu, https://locallost.net/?p=233 adresinden utanmadan çaldığım şu küçük bash betiğidir.

    Bir sistemde çalışan işlemlerin, kopyalarının aktif bellekte tutulması nedeniyle hala silinen kütüphaneleri kullanıp kullanmadığını kontrol eder.

    ps xh -o pid |
    while read PROCID; do
           grep 'so.* (deleted)$' /proc/$PROCID/maps 2> /dev/null
           if [ $? -eq 0 ]; then
                   CMDLINE=$(sed -e 's/\x00/ /g' < /proc/$PROCID/cmdline)
                   echo -e "\tPID $PROCID $CMDLINE\n"
           fi
    done
    

1
Sadece şimdi bu yazıyı fark ettim. Bu son derece hassastır. Çok teşekkürler (+1)
Danduk82

'yeniden başlatma' nereden geliyor? Ubuntu Trusty'de bulamıyorum. Talimatlarınıza uyacak gibi görünen "needrestart" ı buldum?
Ben XO

Debian-goodies paketinde bulunabilir: Packages.debian.org/wheezy/debian-goodies . Ayrıca yeniden başlama ihtiyacı var. Her ikisini de Xenial'de bulabilirsiniz: $ apt-cache search checkrestart
ILIV

Sudo ile bile "E: Kilit dosyası / var / lib / dpkg / lock - open (13: İzin reddedildi) açılamadı" "mesajı alıyorum. Bu, sağladığınız güncellemelerden veya komutlardan birine özgü bir şey mi?
Nathan Hornby

Büyük olasılıkla, bir kilit dosyasını temizlenmemiş bırakan dpkg'ın yanlış / anormal bir şekilde sonlandırılmasıyla ilgili. Örneğin, bir paketin kurulumu başarılı bir şekilde bitmediyse (tam disk vb.) Normal bir şekilde gerçekleşmez Muhtemelen diğer apt-get ve dpkg komutlarını çalıştıramazsınız, değil mi?
ILIV

46

/etc/apt/preferencesaşağıdakilerle değiştirin :

Package: *
Pin: release a=lucid-security
Pin-Priority: 500

Package: *
Pin: release o=Ubuntu
Pin-Priority: 50

Şimdi bir basit apt-get upgradesadece tüm güvenlik güncellemelerini yükseltecek.

Bu neden (ve nasıl) işe yarıyor: Tercihler dosyası, Ubuntu dağıtımından öncelikli 50'ye kadar tüm paketleri sabitleyecektir; Güvenlik havuzundan gelen dosyalara varsayılan (500) öncelik verilir, bu nedenle kurulum için kabul edilirler. Bu, yalnızca şu anda yüklü paketlerden daha fazla istenen paketlerin güvenlik güncelleştirmeleri olduğu anlamına gelir. Apt_preferences manpage sayfasında sabitleme hakkında daha fazla bilgi .

Bu --target-releaseseçenekle çalışan apt-getve aptitude(en azından), belirli sürümleri yükseltmeye uygun olmaları için sabitlemenizi sağlayacak seçenekle güncellemeler için belirli bir dağıtımın geçici olarak tanıtımını yapabilirsiniz .

Bunu sadece komut dosyaları için kullanmak ve sistem için varsayılan yapmak istemiyorsanız, kuralları başka bir yere yerleştirebilir ve bunun yerine kullanabilirsiniz:

apt-get -o Dir::Etc::Preferences=/path/to/preferences_file upgrade

Bu, tercihler dosyasını varsayılan olmayan bir konumdan apt arayacak.

Örnek olarak verilen tercihler dosyası, üçüncü taraf depolara uygulanmaz, eğer bunları apt-cache policysabitlemek isterseniz, sabitlemek için gereken anahtarları kolayca belirlemek için kullanabilirsiniz .


Tam bir cevap için zaman ayırdığınız için teşekkürler. Ben düşünüyorum ben nasıl çalıştığını anlamak. Ancak / etc / apt / preferences dosyasını oluşturup apt-get upgrade komutunu çalıştırdığımda sadece güvenlik güncellemelerini değil tüm paketleri de yükseltmek istiyor. Önce ve sonra yapılan liste yükseltme, / etc / apt / preferences tercihleri haricinde , kaynaktan oluşturduğum ve "elle" dpkg ile yüklediğim Leafpad'i yükseltmek istemiyor. Benim için çok garip, ama sana bir şey ifade edebilir.
Michael Crenshaw

1
Apt-cache policy komutuyla neler olduğunu görebilirsiniz. Güvenlik düzeltmesi almayan paketlerden birini seçin ve çalıştırın apt-cache policy packagename. Bu, çeşitli sürümler için öncelikleri listeleyecektir. Çeşitli çizgiler ve farklı öncelikler görmelisiniz. 50 önceliğine sahip satır yoksa, sabitleme, bir nedenle söz konusu paketleri etkilemez.
Ressu

1
Bu cevabı geçmişte takip etmiştim. Bugün bu cevap nedeniyle 68 güvenlik güncelleme paketinin sunucuma yüklenmediğini ve potansiyel yükleme adayı olarak görünmediğini öğrendim. Bu iyi bir cevap değil!
Gölge

12

Aşağıdakiler Ubuntu 14.04 LTS'de onaylanmıştır.

unattended-upgradePaketi kullan .

Dosyaya bak /etc/apt/apt.conf.d/50unattended-upgrades. Üstte bir bölüm olmalıdır:

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

Varsayılan olarak, yalnızca güvenlik paketleri için katılımsız yükseltmelere izin verecek şekilde yapılandırıldığını unutmayın.

Dosyayı şuna /etc/apt/apt.conf.d/10periodicbenzer şekilde değiştirin:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";

Bu, günde bir kez, katılımsız güvenlik güncellemelerini otomatik olarak yürütür.

Şimdi, elle çalıştırmak için: sudo unattended-upgrade.

Hiçbir şey yapmadan, kuru vadede olarak test etmek için: sudo unattended-upgrade --dry-run.

Kaynak: https://help.ubuntu.com/14.04/serverguide/automatic-updates.html


Bunu aylık bir program yapmanın bir yolu var mı?
mike.b93

1
@ mike.b93, ayar APT::Periodic::Unattended-Upgrade "30";yapılacağına inanıyorum - her 30 günde bir.
vcardillo

5

Her ne kadar çirkin olsa da, güvenlik deposu dışındaki tüm depoları devre dışı bırakıp şunları yapabilirsiniz:

sudo apt-get update && sudo apt-get upgrade

Test etmedim, ancak teoride yalnızca güvenlik deposundaki güncellemeleri bulur ve uygular ...


Evet, bu bir olasılık. Ben içine bakacağım. BASH'da iyi değilim ama bunu yapmak için bir senaryo hazırlayabilirim.
Michael Crenshaw

Tamam, Ubuntu güvenlik deposu dışındaki her şeyi devre dışı bıraktım ve bir koştum sudo apt-get update && sudo apt-get upgrade(yükseltme yapmadan önce iptal ettim ). Sonra tüm depolarımı tekrar etkinleştirdim, koştum sudo apt-get updateeve Güncelleme Yöneticisi'ni açtım. Güvenlik güncellemeleri olarak işaretlenen paketler tam olarak ne apt-get upgradebulundu, ancak çok yakındılar - benim için yeterince yakındı. Keşke tam olarak Update Manager'ın nasıl yaptığını ve aynı komut satırından nasıl yapılacağını bilmek isterdim, ancak bu olacak. Teşekkürler!
Michael Crenshaw,

3
  • apt-get update: sadece depodaki girişleri okuyun - mevcut listeye göre. Nelerin yeni olduğunu kontrol etmek gerekiyordu.
  • apt-get upgrade: çekirdek modülleri olmayan kurulu paketler için tüm güncellemeler. Sürüm güncellemesi yok.
  • apt-get dist-upgrade: Çekirdek modülleriyle birlikte kurulu paketler için tüm güncellemeler. Sürüm güncellemesi yok.
  • apt-getparametresi ile -s: sadece test, hiçbir değişiklik yapılmadı.

0

Debians'da bu komutu sadece güvenlik güncellemelerini yapmak için kullanıyorum:

apt-get install -y --only-upgrade $( apt-get --just-print upgrade | awk 'tolower($4) ~ /.*security.*/ || tolower($5) ~ /.*security.*/ {print $2}' | sort | uniq )

0

Apt-get veya yetenek seçeneklerinden birini bulamıyorum, ancak birisi SuperUser'da da aynı soruyu soruyordu. Tek cevap:

Check and adjust /etc/apt/apt.conf.d/50unattended-upgrade. 
Did you replace 'karmic' with the code name of your Ubuntu?

Ancak bunun işe yarayıp yaramadığına dair bir cevap yok.


2
Bu wiki sayfasında açıklanan yöntemin, yeteneğin --target-release argümanını <release> -security olarak ayarlamaya bağlı olduğu anlaşılıyor. Bu sorunun OP'si gibi, bu yöntem de sadece güvenlik yükseltmelerini değil tüm yükseltmeleri de yükler. Apt-get ve yetenek adam sayfalarını okurken, --target salınımlı argüman bile ben sadece emin değilim gerçi, sadece güvenlik yükseltmeleri için sınırlama amacı sanmıyorum olduğu için.
Michael Crenshaw

0

İşte bunu birkaç farklı şekilde gerçekleştiren bir betik:

#!/usr/bin/env bash
set -e

# List upgradable packages
apt-get update
apt list --upgradable 2>/dev/null
# List security upgrades
test "$(apt-get upgrade -s -y)" && (apt-get upgrade -s -y)
# List upgradable apt packages then upgrade
apt-get update && apt-get upgrade -y  -V | grep '=>' | awk '{print$1}' && test "$(apt-get upgrade -y)"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.