![Arch Linux에서 자동으로 업데이트를 책임감 있게 실행하려면 어떻게 해야 합니까?](https://rvso.com/image/38695/Arch%20Linux%EC%97%90%EC%84%9C%20%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%EB%A5%BC%20%EC%B1%85%EC%9E%84%EA%B0%90%20%EC%9E%88%EA%B2%8C%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 Arch Linux를 처음 접한 사람이고 여전히 일부 패러다임에 익숙해지고 있습니다. 나는 훨씬 더 구조화되고 어떤 면에서는 예측 가능한 다른 배포판의 많은 습관을 가지고 왔습니다.
몇 가지 시스템에 대해 제가 하고 싶은 한 가지는 cron 작업을 활성화하여 모든 시스템 패키지를 자동으로 업데이트하는 것입니다. 상황이 어떻게 진행되었는지 알려주는 시스템의 의미 있는 피드백을 원한다는 점을 제외하면 꽤 쉬울 것 같습니다. 너무 장황하지 않아서 시스템이 제대로 작동하는 것을 발견할 때까지 이를 무시하게 됩니다.
- 전체 출력은
pacman
불필요합니다. 다운로드에 시간이 얼마나 걸렸는지, 53개 중 46번째 업데이트인지는 상관하지 않습니다. - 대부분의 경우 나는 성공에 관심이 없습니다.
- 나는 오류에 관심이 있습니다. 업데이트 실행이 실패하면 이에 대해 알고 싶고 특정 오류 메시지를 패치해야 합니다.
설치 중에 제공되는 "알림"에 관심이 있습니다. 예를 들어 오늘의 systemd 업데이트에서는 다음과 같이 말했습니다.
:: coredumps are no longer sent to the journal by default. To re-enable: echo >/etc/sysctl.d/50-coredump.conf \ "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"
또는 파일 시스템이 다음을 생성했습니다.
warning: /etc/group installed as /etc/group.pacnew warning: /etc/passwd installed as /etc/passwd.pacnew warning: /etc/shadow installed as /etc/shadow.pacnew
이 마지막 범주는 실제로 패키지 세트 전체에서 매우 일관성이 없는 것처럼 보이기 때문에 이 질문을 하게 된 계기가 되었습니다. 이들 중 일부는 에 의해 생성되고
post_upgrade()
다른 일부는 에 의해 생성되는 것 같습니다install()
. 때로는 stdout에 기록되고 때로는 stderr에 기록됩니다. 메시지의 형식은 매우 다양합니다. 전체 블록 앞에 어떤 방식으로든 들여쓰기가 붙는 경우도 있고, 에코된 문자열만 있는 경우도 있습니다.
시스템에 개입해야 하지만 다른 방법으로는 방해할 수 없는 사항에 대해 알고 싶습니다. 이 데이터를 지능적으로 관리하고 시스템 관리를 단순화하는 도구가 있습니까? 패키지를 설치하는 팩맨 프로세스와 별도로 패키지에서 생성된 출력을 얻을 수 있는 방법이 있습니까? 아니면 설치 로그에서 문제가 없는 항목을 필터링하는 일종의 파서를 직접 작성해야 합니까?
¹ 이것이 얼마나 어리석은 일인지 짚어보기 전에 저는 재난 발생 시 쉽게 복구할 수 있는 스냅샷 기반 전체 시스템 백업 없이는 프로덕션 서버에서 이 작업을 수행하지 않을 만큼 똑똑하다는 점을 참고하시기 바랍니다.
답변1
나는 당신과 이 스레드에서 일어날 수 있는 다른 사람 모두에게 명확하게 말하고 싶습니다. 당신이하고 싶은 일은~ 아니다가능한. 아치는 자신이 기대하는 사실을 비밀로 하지 않습니다.너시스템을 관리합니다. 해당 책임의 일부가 업데이트 주기에 존재합니다.
이제단계책임감 있게 자동화할 수 있는 업데이트 프로세스가 있지만 결코 자동화된 -Syu
. 업그레이드를 위해 그곳에 있기만 하면 됩니다.
cron
예를 들어, 설치해야 하는 패키지를 다운로드하는(설치하지는 않음) 작업을 설정하는 것이 가능합니다 . 다음은 pacman
문서에서 발췌한 내용입니다.
SYNC OPTIONS ... -w --downloadonly Retrieve all packages from the server, but do not install/upgrade anything.
cron
그런 다음 실행할 작업을 설정할 수 있습니다 sudo pacman -Syuw
. 나는 그다지 익숙하지 않거나 cron
일정 관리 능력에 대해 잘 모릅니다. 그러나 특정 조건(예: 특정 값을 반환하는 명령)이 충족된 후에만 작업을 실행할 수 있는 경우 필요에 따라 새 패키지 다운로드를 트리거하는 것은 매우 간단합니다.
예를 들어 에 대해 수표를 실행하는 것을 상상해 보겠습니다 checkupdates | wc -l
. 0보다 큰 숫자가 반환되면 다운로드가 실행될 수 있습니다. 그러나 이는 -Syu
귀하가 현장에 있고 업그레이드를 처리할 준비가 되었을 때 실행하는 것을 대체할 수는 없습니다.
질문의 마지막 부분인 업그레이드 중에 발생한 결과를 어디서 얻을 수 있는지 알아보려면 /var/log/pacman.log
. 여기에는 관심을 가질 만한 모든 오류 정보가 포함되어 있습니다.
있다도구pacman
이는 익숙하지 않은 사용자에게 좀 더 친근하게 다가가기 위한 것입니다 . 제가 착각한 것이 아니라면 수동 개입이 필요한 업데이트가 있는 경우 뉴스 항목에 대한 알림도 제공합니다.
이 도구는 단기적으로 여러분의 삶을 좀 더 단순하게 만들 수 있지만 메일링 리스트를 현명하고 부지런히 따르는 것을 결코 대체할 수는 없습니다.
답변2
정말 좋은 일을 하는 오래된 스크립트가 있습니다. 그것은이라고세이프팩.
편집: 이 스크립트는 github에서 계속 사용할 수 있습니다. https://github.com/bencahill/binfiles/blob/master/safepac
그것은 무엇을 하고 어떻게 작동합니까?
제가 일반적으로 Arch를 업데이트하는 방식은 뉴스를 읽고 나서 업데이트를 하거나
pacman -Syu
, 그냥 업데이트를pacman -Syu
하고 문제가 생기면 뉴스를 읽는 것입니다. 이제 이 스크립트는 다른 작업을 수행하지 않습니다. RSS 피드에서 최신 뉴스 항목을 가져오고, 몇 가지sed
마법을 수행하고, 뉴스에 사용할 수 있는 업데이트가 있는 모든 패키지의 이름을 비교합니다. 뉴스의 "package-name" 및 "package-name-"과 일치하며 패키지 이름이 뉴스 어딘가에 나타나면 해당 패키지를 무시하고 다른 모든 패키지만 업데이트합니다. 이렇게 하면 문제를 직접 검사할 시간이 있을 때까지 잘못될 수 있는 모든 작업이 연기되고 중요하지 않은 업데이트는 자동으로 수행됩니다!일반적으로 원활하지 않을 수 있는 업데이트를 처리한 후에는
safepac
특정 패키지가 여전히 뉴스에 있다는 이유로 무시하고 싶지 않을 것입니다. 이것이 바로 무시 목록의 목적입니다. 따라서 수동으로 업데이트할 때마다 를 사용하여 해당 뉴스 항목을 무시 목록에 추가할 수 있습니다 .safepac -Ia xxx
xxx
뉴스 항목의 번호입니다. 스위치 를 사용하여 구문 분석에 포함하려는 최신 뉴스 수를 지정할 수도 있습니다-n
. 스크립트는 또한 존재하지 않는 항목을 건너뛸 만큼 똑똑합니다. 뉴스에 임의로 나타날 수 있는 매우 짧은 이름(예: "yes")을 가진 패키지에 문제가 있는 경우 해당 패키지를 화이트리스트에 추가하면safepac -Wa
뉴스에 나타나더라도 항상 설치됩니다.
이 스크립트는 또한 다이제스트 메일(전체 로그 포함)과 업데이트의 핵심 부분을 보내기 때문에 작업 메일 설정이 필요하다는 점에 유의하세요.
출력 을 구문 분석하여 "note" "pacnew" "error" "important" "warning" "exists"
pacman
라는 단어를 찾아 다이제스트에 추가합니다 .
스크립트는 오래되었지만 아이디어는 좋으며 사소한 업데이트가 있는 경우에도 여전히 작동할 수 있습니다.
답변3
나는 내 것을 사용한다때까지yaourt
cron으로 실행합니다 .