Debian Unstable에서 대규모 패키지 업그레이드를 안전하게 수행하는 방법은 무엇입니까?

Debian Unstable에서 대규모 패키지 업그레이드를 안전하게 수행하는 방법은 무엇입니까?

나는 몇 달 동안 Debian Unstable(sid)을 실행해 왔습니다. 내가 직면한 유일한 심각한 문제는 업그레이드 중에 Python3이 일시적으로 중단되었다는 점이었습니다. 운 좋게도 관리자가 수정 사항을 발표한 후 하루 이내에 문제를 해결할 수 있었습니다.

그러나 앞으로는 이러한 문제가 발생하지 않도록 노력 중이며 데비안 불안정성에 대한 패키지 업데이트를 언제 진행해야 하는지, 업데이트하기 전에 버그가 수정될 때까지 언제 기다려야 하는지에 대한 모범 사례에 대해 여기에 질문합니다. 그건:설치 중 시스템 손상 위험을 최소화하면서 업데이트된 데비안 불안정 시스템을 유지하는 방법은 무엇입니까?

예를 들어, 지금 실행하면 sudo apt-get update; sudo apt-get dist-upgrade업그레이드해야 하는 소프트웨어 패키지가 200개가 넘고 그 중 2개를 삭제하는 것이 좋습니다.

The following packages were automatically installed and are no longer required:
  libnfs8 python-subprocess32
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  libnfs11 libzstd1 python-kiwisolver python-olefile
The following packages will be upgraded:
  apt apt-utils atom-beta base-passwd binutils binutils-common binutils-x86-64-linux-gnu bluetooth bluez bubblewrap
  ca-certificates ca-certificates-java console-setup console-setup-linux cpp cpp-7 dconf-gsettings-backend
  dconf-service e2fslibs e2fsprogs e2fsprogs-l10n evince evince-common fontconfig fontconfig-config g++ g++-7 gcc
  gcc-7 gcc-7-base gcc-8-base geany geany-common gir1.2-glib-2.0 gnome-desktop3-data gtk-update-icon-cache gvfs
  gvfs-bin gvfs-common gvfs-daemons gvfs-libs keyboard-configuration libapt-inst2.0 libapt-pkg-perl libapt-pkg5.0
  libarpack2 libasan4 libatomic1 libavcodec57 libavformat57 libavresample3 libavutil55 libbabl-0.1-0 libbinutils
  libbluetooth3 libboost-atomic1.62.0 libboost-chrono1.62.0 libboost-date-time1.62.0 libboost-filesystem1.62.0
  libboost-iostreams1.62.0 libboost-locale1.62.0 libboost-program-options1.62.0 libboost-python1.62.0
  libboost-regex1.62.0 libboost-system1.62.0 libboost-thread1.62.0 libcairo-gobject2 libcairo2 libcc1-0 libcilkrts5
  libcom-err2 libcomerr2 libcups2 libcupsfilters1 libcupsimage2 libdconf1 libdouble-conversion1 libdw1 libelf1
  libevdocument3-4 libevview3-3 libext2fs2 libfftw3-double3 libfontconfig1 libgcc-7-dev libgcc1 libgegl-0.3-0
  libgfortran4 libgirepository-1.0-1 libglib2.0-0 libglib2.0-bin libglib2.0-data libgnome-desktop-3-17 libgomp1
  libgpg-error0 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz-icu0 libharfbuzz0b libhdf5-100
  libhttp-negotiate-perl libidn11 libinput-bin libinput10 libitm1 libjs-sphinxdoc libkpathsea6 liblsan0 liblz4-1
  libmpx2 libnm0 libnspr4 libnss3 libopenmpt-modplug1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0
  libparted-fs-resize0 libparted2 libperl5.26 libpostproc54 libprocps6 libpython-stdlib libpython2.7
  libpython2.7-minimal libpython2.7-stdlib libpython3-dev libpython3-stdlib libqt4-dbus libqt4-declarative
  libqt4-designer libqt4-dev libqt4-dev-bin libqt4-help libqt4-network libqt4-opengl libqt4-opengl-dev
  libqt4-qt3support libqt4-script libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-svg
  libqt4-test libqt4-xml libqt4-xmlpatterns libqt5core5a libqt5dbus5 libqt5gui5 libqt5multimedia5 libqt5network5
  libqt5opengl5 libqt5printsupport5 libqt5svg5 libqt5widgets5 libqt5x11extras5 libqtcore4 libqtdbus4 libqtgui4
  libquadmath0 libservlet3.1-java libsoup-gnome2.4-1 libsoup2.4-1 libsqlite3-0 libss2 libstdc++-7-dev libstdc++6
  libswresample2 libswscale4 libtiff5 libtsan0 libtumbler-1-0 libubsan0 libvlc-bin libvlc5 libvlccore9 libvolume-key1
  libvte-2.91-0 libvte-2.91-common libwww-robotrules-perl libxft2 ndiff network-manager nmap nmap-common parted perl
  perl-base perl-modules-5.26 procps python python-apt-common python-matplotlib python-matplotlib-data python-minimal
  python-pil python-tk python-tz python2.7 python2.7-minimal python3 python3-apt python3-crypto python3-dev python3-gi
  python3-minimal qdbus qt4-designer qt4-linguist-tools qt4-qmake qt5-gtk-platformtheme qtcore4-l10n
  qttranslations5-l10n sqlite3 tumbler tumbler-common virtualbox virtualbox-dkms virtualbox-qt vlc vlc-bin
  vlc-plugin-base vlc-plugin-notify vlc-plugin-qt vlc-plugin-samba vlc-plugin-skins2 vlc-plugin-video-output
  vlc-plugin-video-splitter vlc-plugin-visualization xfce4-settings xserver-xorg-input-libinput
234 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 275 MB/275 MB of archives.
After this operation, 5,831 kB of additional disk space will be used.
Do you want to continue? [Y/n]

이러한 업그레이드/제거를 안전하게 수행할 수 있는지 어떻게 확인합니까(예: 패키지 설치를 중단시키는 알려진 버그가 있습니까)?

이상적으로는 업데이트할 때마다 수백 개의 버그 보고서 페이지를 읽을 필요가 없지만 컴퓨터에 손상을 줄지 모르면서 맹목적으로 모든 버그 보고서 페이지를 설치하고 싶지도 않습니다.

실제로 각 개별 패키지에 대한 오류 보고서를 수동으로 확인합니까, 아니면 이를 수행하는 더 효율적인 방법이 있습니까? 불안정한 데비안 시스템을 유지할 때 업데이트를 연기할 시기를 알기 위해 시스템 전체 업데이트 중에 어떤 조치를 취합니까?

답변1

나는 이것이 당신이 찾고 있는 대답이 아니라는 것을 알고 있지만 이것이 정답이라고 생각합니다.

넌 몰라. 이를 위해서는 Debian stable을 사용하면 됩니다.

최신 패키지를 사용하려면 (드문) 패키지 손상을 감수해야 합니다. 패키지 유지관리자는 때때로 변경 로그가 부정확하거나 불완전하기 때문에 모든 변경 로그를 확인하고 테스트를 수행해야 하기 때문에 자신의 (여러) 종속성 중 하나에 자체 패키지를 손상시킬 수 있는 업데이트가 있는지 확인할 수 없습니다.

대안으로, 정말로 최신 버전이 필요하다면 debian stable을 사용하고 stable의 일부 패키지를 혼합할 수 있습니다. 그러나 이러한 패키지 업그레이드가 안정적인 시스템과 호환되는지 확인해야 합니다.

캐시를 지우지 않는 한 항상 이전 버전의 패키지로 롤백할 수 있습니다. 컴퓨터를 복제하고 업데이트를 시도한 후 테스트에 성공하면 호스트 컴퓨터에서 업데이트할 수 있습니다.

실제로 각 개별 패키지에 대한 오류 보고서를 수동으로 확인합니까, 아니면 이를 수행하는 더 효율적인 방법이 있습니까? 불안정한 데비안 시스템을 유지할 때 업데이트를 연기할 시기를 알기 위해 시스템 전체 업데이트 중에 어떤 조치를 취합니까?

작업이 필요하고 가동 중지 시간을 감당할 수 없는 생산 시스템에는 불안정한 시스템을 사용하지 않을 것입니다. 불안정한 시스템의 경우: 기도하고 업데이트합니다. 예상대로 작동하지 않는 경우 마지막 btrfs 스냅샷을 로드하여 전체 시스템을 롤백하고 문제가 업스트림에서 해결될 때까지 기다립니다.

답변2

Arrowchester가 좋은 답변을 제공했으므로 그 내용을 반복하지는 않겠습니다.

그 외에도 문제가 발생할 수 있는 위치를 파악하는 데 도움이 되는 몇 가지 팁은 다음과 같습니다.

  1. 언제나새로운 커널, glibc 및 libstdc++ 버전에 대한 버그 보고서를 확인하세요. 시스템에 따라 사용하는 SSL 라이브러리, init 시스템 및 기타 라이브러리를 추가할 수 있습니다(예: 데스크톱 설치가 있는 경우 Qt 또는 GTK 라이브러리 추가). 이러한 구성 요소 중 하나에 영향을 미치는 버그가 있는 경우매우아마도 적어도 무언가가 중단되고 전체 시스템이 파괴될 가능성이 높습니다. 이 조언은 Debian 사용자뿐만 아니라 Debian Sid와 같은 배포판을 사용하는 모든 사람에게 적용됩니다.

  2. 또한 일반적으로 apt, dpkg 및 기타 패키지 관리자 패키지를 다시 확인하는 것이 좋습니다. 이것이 시스템을 죽일 가능성은 없지만 이들 중 하나에 의해 손상된 시스템을 복구하는 것은 꽤 어렵습니다(몇 년 전 젠투 패키지 관리자에 버그가 있었을 때 수동으로 복구해야 했던 기억이 납니다. 시스템). 업그레이드 중에 설치된 패키지).

  3. 어리석게 들리더라도 업그레이드가 완료된 후 반드시 재부팅하십시오. 이러한 시스템에서 내가 보는 대부분의 문제는 새 프로그램과 함께 실행되는 오래된 프로그램으로 인해 발생합니다.

  4. 가능하다면 사용을 고려해 보는 것이 좋습니다 aptitude. 볼 수 있는 훌륭한 미리보기 모드가 있습니다.각각의 새 패키지가 설치됩니다. 설치되는 패키지는 업그레이드되는 패키지와 업그레이드에서 제외된 패키지를 건너뛰는 이유에 따라 다릅니다. 이 정보는 업그레이드로 인해 발생할 수 있는 문제를 파악하는 데 유용합니다. 이들로부터 동일한 정보를 얻 apt-get거나 dpkg종속성을 추적하려면 많은 수동 작업이 필요합니다.

답변3

오랜 SID 사용자로서 업데이트로 인해 시스템이 손상될 가능성은 일상적인 위험이며, 제가 매일 하는 일은 다음과 같습니다.

  1. GUI가 여전히 실행 중인 루트 터미널에서

업데이트가 용이함

적절한 전체 업그레이드 -d

이제 멈춰서 앞으로 일어날 일을 주의 깊게 검토하십시오. 먼저 철거를 찾아보세요. 무엇이든 제거해야 한다면 이는 위험의 첫 번째이자 주요 신호입니다. 마지막 업데이트 이후 오랜 시간(수일 또는 몇 주)이 지났고 시스템을 정말로 업데이트하고 싶다면, 제거할 패키지를 조사하기 위해 dependency 및 rdependents와 데비안의 정보를 사용해야 합니다. 때로는 다른 이름의 대체 패키지를 도입하여 패키지가 더 이상 사용되지 않으므로 이전 패키지를 안전하게 삭제할 수 있습니다. 그러나 더 일반적으로는 다른 업그레이드된 패키지에 의해 종속성이 깨져 귀하/귀하의 시스템에 필요한 것이 제거되어 패키지가 깨질 수 있습니다. 따라서 삭제 내용이 표시되면, 특히 시스템이 최근에 업데이트된 경우 가장 안전하고 쉬운 방법은 'n'을 사용하여 전체 업그레이드를 중단하고 내일 안전할 때 다시 시도하는 것입니다.

  1. 계속해도 안전할 것 같으면 "y"로 대답하고 패키지를 다운로드하세요.

  2. Ctrl-Alt-F1을 눌러 tty1 콘솔에 들어가서 루트로 로그인하십시오.

systemctl은 여러 사용자를 격리합니다.대상

곧 누군가가 이것이 불필요하다고 게시할 것입니다. 잘 모르겠습니다. 저는 소프트웨어 엔지니어가 아니며 시스템의 xserver 및 GUI 부분이 손상되는 것을 원하지 않습니다. 몇 년 전에 일부 하드웨어가 고장나거나 업그레이드된 이후 오류 없이 실행되고 있는 완전히 업데이트된 3개의 SID 시스템이 있습니다.

4.

적절한 포괄적인 업그레이드

청소가 용이함

systemctl 분리 graph.target&& 종료

패키지가 제거되지 않은 경우에도 문제가 있는 새 패키지로 인해 sid 시스템이 손상될 수 있는 경우는 거의 없습니다. 하지만 이는 매우 명백했고 수정 사항이 꽤 빨리 나왔기 때문에 테스트에서 그런 일이 발생했을지 의심스럽습니다.

원천:http://forums.debian.net/viewtopic.php?f=10&t=131073&p=633270#p633215

관련 정보