다른 호스트에서 데비안 OS()를 업데이트하면 apt-get dist-upgrade
동일한 화면에서 많은, 종종 작은 변경 사항을 볼 수 있습니다. 구성 파일이 수정되면 새 버전을 사용할 수 있다는 메시지가 표시되고 문제를 해결하라는 메시지가 표시됩니다. 수정되었으며 apt/dpkg는 변경 사항을 새 버전과 안정적으로 통합할 수 없습니다.
이제 이 옵션 메뉴는 파일마다 다릅니다. 때로는 동일한 패키지 내에서도 발생합니다.
일부 파일에는 "패키지 구성" 콘솔 UI가 있고 다른 파일에는 일반 콘솔 출력이 사용됩니다. 패키지 구성 UI에서 사용할 수 있는 옵션이 항상 동일하지는 않습니다.
수정된/새 버전 파일의 이름이 항상 동일하지는 않습니다. 새 파일이 항상 있어야 할 곳에 저장되지는 않습니다(때때로 "tmp"에 저장됨). 새 파일의 명명 체계도 일관성이 없습니다(일부 패키지는 임의의 이름을 사용하고, 일부 패키지는 -new를 사용하고, 다른 패키지는 -dpkg-new를 사용하는 등).
일부 패키지는 dpkg 기본값이 어디에 있는지 알려주기를 거부합니다. 일부 패키지는 dpkg-old, -old, -dist, -dpkg-dist 또는 -old-nameofpackage 확장자를 포함하는 이전 버전을 제공하지 않지만 다른 패키지는 제공합니다. (따라서 어떤 경우에는 3방향 병합을 수동으로 할 수 있지만 다른 경우에는 할 수 없습니다). 일부 패키지에는 편리한 "버전 간 3방향 병합" 기능이 추가되어 있습니다. 이는 일반적으로 문제를 자동으로 해결하므로 항상 가장 먼저 시도하는 것입니다. 구성 파일의 대부분 변경 사항은 일반적으로 주석에 오타가 수정되었습니다.
프로그램이나 병렬 비교가 표시되는 방식도 패키지/파일마다 다를 수 있습니다.
그래서 나는 전체를 원한다목적패키지 관리 시스템의 핵심은 프로그램을 설치하고 제거하는 일관된 방법을 만드는 것입니다. 사용자가 관리하기 쉽습니다.
여기서 무슨 문제가 발생합니까?끔찍한UI/UX에서? 사용자가 아파트를 변경/수정하기 위해 할 수 있는 일이 있나요?
- "3방향 병합 만들기"를 사용할 수 있습니다.
- 새 파일은 항상 일관되게 이름이 바뀌거나 배치됩니까?
동일한 암기적 프로세스에 따라 동일한 작업을 수행하는 데에는 1,000가지의 작은 변형이 있으므로 수동으로 다시 읽고 각 프로필을 처리하는 방법을 정확히 파악해야 하는 것은 고통스러운 작업입니다.
제가 의미하는 바를 설명하기 위해 여기에 두 가지 업그레이드가 있습니다.
Configuration file '/etc/ssh/ssh_config'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
A new version (/tmp/tmp.3RoEfdEm3M) of configuration file /etc/ssh/sshd_config is available, but the version installed currently has been locally modified.
What do you want to do about modified configuration file sshd_config?
install the package maintainer's version
keep the local version currently installed
show the differences between the versions
show a side-by-side difference between the versions
show a 3-way difference between available versions
do a 3-way merge between available versions
start a new shell to examine the situation
두 번째 변종의 옵션은 무엇입니까? 항상 이 순서대로 나타나는 것은 아닙니다.
마치 당신을 넘어뜨리기 위해 설계된 것처럼 느껴집니다.
답변1
먼저 질문의 "사용자 대상" 측면을 다루겠습니다.
"3방향 병합 만들기"를 사용할 수 있습니다.
이는 사용자가 제어할 수 없으며 패키지가 구성 파일을 관리하는 방법에 따라 다릅니다(아래 참조).
새 파일은 항상 일관되게 이름이 바뀌거나 배치됩니까?
아니요, 하지만 실제로는 중요하지 않습니다. 특히 두 번째 예(첫 번째 예 sshd_config
)에 표시된 임시 파일은 실제로 임시 파일입니다. 이는 비교 도구 등이 비교해야 하는 데이터를 찾을 수 있도록 사용 가능한 구성 파일의 변형입니다. (여기서 다음과 같은 방법으로 사용자 경험을 개선할 수 있습니다.아니요임시 파일 이름은 기본적으로 사용자가 "상황을 확인"하기 위해 셸을 시작할 때만 표시됩니다. )
특히 데비안에서 이런 일이 발생하는 이유는 구성 파일이 다양한 방식으로 처리될 수 있기 때문입니다.
예상한 대로 패키지 관리자는 dpkg
자체 구성 파일 관리 기능을 제공합니다. 이것이 귀하의 예에서 첫 번째 변형(업그레이드)을 생성하는 ssh_config
것 입니다. 작업할 수 있는 정보는 현재 디스크에 존재하는 구성 파일과 설치하려는 패키지와 함께 제공되는 새 구성 파일의 두 가지뿐입니다. 따라서 3방향 병합을 제공할 수 없습니다. 패키지 관리자의 경우 사용이 매우 간단합니다(실제로 대부분의 경우 작업이 전혀 필요하지 않습니다). dpkg
프로필 처리는 사용자가 기존 파일을 유지하는지(이 경우 나중에 참조할 수 있도록 확장자를 사용하여 새 파일을 유지 ) .dpkg-dist
로 끝나는 파일 인지 또는 새 파일을 설치하는지(이 경우 이전 파일은 확장자를 유지합니다 )..dpkg-old
.dpkg-dist
.dpkg-old
이러한 상황을 개선하기 위해,ucf
도구개발되었습니다. 구성 파일의 원본 버전을 저장하므로 3방향 비교 및 병합이 가능합니다. 그러나 패키지 관리자의 작업이 필요하므로 많은 패키지에서 이를 사용하지 않습니다. 또한 3방향 병합 지원은 선택 사항입니다. 너는 볼 수있어openssh-server
ucf
여기에 통합.
가장 중요한 것은 다음과 같습니다.debconf
, 데비안 구성 관리 시스템. 설치 프로세스 중에 상호 작용해야 하는 소프트웨어 패키지입니다.예~해야 한다사용그러나 다시 말하지만 이는 패키지 관리자의 작업이 필요하므로 지금은 일반적이지만 여전히 몇 가지 예외가 있습니다(사용하기 위해 업데이트되지 않은 아주 오래된 패키지 포함 debconf
).
물론 일부 관리자는 위의 내용을 좋아하지 않았거나 위의 내용이 사용 가능해지기 전에 자체 솔루션을 개발했기 때문에 일부 패키지는 자체 작업을 수행했습니다.
Joey Hess는 1999년부터 Debian VA Linux 제품군에 참여한 것에 대해 씁니다.debconf
에서는 패키지 구성 생성 및 수정에 대한 몇 가지 배경 정보를 제공합니다 .
답변2
업데이트를 수행하기 전에 설치하십시오. distro-info
그렇지 않으면 웹 브라우저에 액세스할 수 없는 경우 CLI에서 이전 버전 이름을 찾는 것이 까다로울 수 있습니다.
주문하다:
diff3 -m config.file config.file.dpkg-old config.file.dpkg-new > config.file.merged
diff config.file config.file.merged
그런 다음 편집하거나 병합이 작동하는 경우:
mv config.file.merged config.file
debconf/ucf와 동일한 작업을 수동으로 수행하는 방법입니다.
이렇게 하면 사용자에게 이전/새 구성 파일을 남겨둔 위치를 알리지 않는 패키지만 남게 됩니다. 업그레이드 프로세스 중간에 이전 버전의 패키지에서 누락된 구성 파일을 다운로드하려면 별도의 전체 시스템을 설치하고 그 안에 패키지를 설치하면 됩니다. 또는 브라우저를 통해 수동으로 다운로드한 다음 Linux 컴퓨터로 FTP로 전송할 수 있습니다. 그러나 업그레이드된 시스템의 명령줄에서 수행해야 하는 경우 상황이 좀 더 복잡해집니다.
이것이 내가 지금까지 얻은 것입니다. 구현되지 않은 또 하나의 사항:
GETPACKAGERELEASEVER
--> "buster"의 일부인 패키지 버전은 무엇입니까? 이것을 어떻게 인쇄하나요? 또한 "main"인지 "contrib"인지 어떻게 확인하나요?
(이 섹션의 관련 질문;CLI에서 특정 배포판의 패키지 버전을 확인하는 방법은 무엇입니까?)
# Todo: Look this up in some way using apt. (main, non-free, or contrib).
pkgType=main
previousReleaseName = $(distro-info -o)
# If not possible to use distro-info:
# This is rather hacky, and will fail when debian updates this webpage.
# release=$(cat /etc/issue | sed -E 's/[^0-9]*([0-9]+).*/\1/')
# previousRelease=$(($release-1))
# wget -O- https://www.debian.org/releases/ > releases.html
# previousReleaseName = $(cat releases.html | grep "Debian $previousRelease" | sed -E 's/.*Debian [0-9]+ \(<q>([a-z]+).*/\1/'))
firstLetter="$(echo $packagename | head -c 1)"
packageVersion=GETPACKAGERELEASEVER($packagename,$previousReleaseName)
mkdir /tmp/$packagename/
cd /tmp/$packagename
rm -r /tmp/$packagename/*
wget -O package.deb "https://deb.debian.org/pool/$pkgType/${firstLetter}/${packageName}/${packagename}_${packageVersion}_amd64.deb"
ar x package.deb
tar -xvf data.tar.xz
diff3 -m /etc/$packagename/$configfile /tmp/$packagename/etc/$configfile /etc/$packagename/$newconfigfile > /etc/$packagename/$configfile.merged`