쉽게 deb의 압축을 풀고 새 버전으로 deb를 다시 패키징하세요.

쉽게 deb의 압축을 풀고 새 버전으로 deb를 다시 패키징하세요.

나는 이미 그것을 보았다쉽게 DEB 압축 풀기, postinst 편집 및 DEB 재패키징- 그러나 원본 .deb 파일을 일부 변경하려는 경우 .deb 버전 번호를 올바르게 변경하는 방법이 문서에 설명되어 있지 않습니다.

예 를 들어 Ubuntu 14.04를 사용하고 있습니다 hostapd.

$ mkdir /tmp/debtest
$ cd /tmp/debtest/
$ apt-get download hostapd
Get:1 http://dk.archive.ubuntu.com/ubuntu/ trusty-updates/universe hostapd amd64 1:2.1-0ubuntu1.4 [423 kB]
Fetched 423 kB in 1s (361 kB/s)  
$ ls -la hostapd_1%3a2.1-0ubuntu1.4_amd64.deb 
-rw-rw-r-- 1 myuser myuser 422846 Nov 10  2015 hostapd_1%3a2.1-0ubuntu1.4_amd64.deb

이제 위에서 참조한 링크를 따라 압축을 풀 수 있습니다.

$ mkdir unpack-hostapd
$ dpkg-deb -R hostapd_1%3a2.1-0ubuntu1.4_amd64.deb unpack-hostapd
$ ls -la unpack-hostapd/
total 20
drwxr-xr-x 5 myuser myuser 4096 Jan 26 11:31 .
drwxrwxr-x 3 myuser myuser 4096 Jan 26 11:31 ..
drwxr-xr-x 2 myuser myuser 4096 Nov  9  2015 DEBIAN
drwxr-xr-x 6 myuser myuser 4096 Nov  9  2015 etc
drwxr-xr-x 4 myuser myuser 4096 Nov  9  2015 usr

README.Debian에 텍스트 한 줄을 추가하는 것과 같은 간단한 변경을 하고 싶다고 가정해 보겠습니다.

echo "Just a test line" >> unpack-hostapd/usr/share/doc/hostapd/README.Debian

...이제 새 .deb로 다시 패키지하고 싶습니다.

첫 번째 질문- 압축이 풀린 상태에서 패키지의 현재(이전) 버전을 검색할 수 있는 방법이 있습니까? 나는 파일 이름을 신뢰하지 않기 때문에 보통 다음과 같이 합니다.

$ apt-cache policy hostapd
hostapd:
  Installed: (none)
  Candidate: 1:2.1-0ubuntu1.4
...

...이는 사용할 때 패키지의 버전 1:2.1-0ubuntu1.4를 다운로드했음을 알려 주지만 apt-get download...반드시 디렉토리에 있는 버전일 필요는 없습니다 unpack-hostapd. 디렉토리에 추출한 원본 .deb의 패키지 버전을 알려주는 명령이 있습니까 unpack-hostapd?

이제 이전 debchange과 같이 자동 증가 버전 번호를 사용하고 있지만 dch -i(다른 소스 프로젝트에서도) 여기에서 시도하면 다음과 같습니다.

$ cd unpack-hostapd
$ pwd
/tmp/debtest/unpack-hostapd
$ dch -e
dch: fatal error at line 580:
Cannot find debian/changelog anywhere!
Are you in the source code tree?
(You could use --create if you wish to create this file.)
$ find . -name 'changelog*'
./usr/share/doc/hostapd/changelog.Debian.gz
$ dpkg -c ../hostapd_1%3a2.1-0ubuntu1.4_amd64.deb | grep changelog
-rw-r--r-- root/root      2126 2015-11-09 14:56 ./usr/share/doc/hostapd/changelog.Debian.gz

...하지만 여기서는 아무것도 바꿀 수 없습니다.

그래서 나의두 번째 질문dch -i예: .deb 패키지 버전 번호를 변경하고 압축을 푼 .deb 패키지에 변경 로그를 추가할 수 있는 쉬운 방법(소스 패키지와 마찬가지로)이 있습니까 ?

물론, 결국 저는 이 새 버전을 .deb 패키지로 다시 패키징하고 싶습니다. 위의 링크는 비슷한 것을 제안 dpkg-deb -b unpack-hostapd hostapd_1%3a2.1-0ubuntu1.4_amd64.deb하지만 여기서는 version 을 사용하겠다고 나와 있으므로 1:2.2결국에는 다음과 같은 파일 이름을 사용하겠습니다. dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb- 하지만 버전은 .deb 일치에서도 작동해야 하는데 어떻게 해야 할지 모르겠습니다...

답변1

DEBIAN/control버전은 바이너리 제어 파일에 정의되어 있으며 사용 시 추출됩니다 dpkg-deb -R. 필드 찾기 Version::

Version: 1:2.5.2+v2.4-3+b1

여기에서 새 패키지의 버전 번호를 편집할 수 있습니다. (선택적으로 변경 로그 항목을 의 변경 로그에 추가할 수 있습니다 .) 그런 다음 올바른 파일 이름이 결정 usr/share/doc/hostapd/changelog.Debian.gz되도록 다음과 같이 패키지를 다시 빌드할 수 있습니다 .dpkg-deb

mkdir newpkg
dpkg-deb -b hostapd newpkg

그러면 newpkg디렉터리에 적절한 이름의 새 패키지가 생성됩니다.

이상적으로는 새 바이너리에 대한 라이브러리 요구 사항을 확인하고 종속성 정보를 업데이트해야 합니다 control!

답변2

어떤 종류의 수동 편집이 나에게 도움이 되었는지는 다음과 같습니다. 그러나 이것은 맹목적인 추측이므로 시스템을 아는 사람으로부터 답변을 얻는 것이 좋습니다.

# decompress changelog.Debian.gz
unpack-hostapd$ gzip -d  usr/share/doc/hostapd/changelog.Debian.gz

# edit the uncompressed changelog.Debian:
# add this on top:
# wpa (2.2) trusty-security; urgency=medium
# 
# * whatever
# 
# wpa (2.1-0ubuntu1.4) trusty-security; urgency=medium
# ....
unpack-hostapd$ nano usr/share/doc/hostapd/changelog.Debian

# repack changelog.Debian.gz
unpack-hostapd$ gzip -9 usr/share/doc/hostapd/changelog.Debian

# change DEBIAN/control - Source: and Version:
# change to:
# Source: wpa (2.2)
# Version: 1:2.2
unpack-hostapd$ nano DEBIAN/control

# repack .deb:
unpack-hostapd$ cd ..
$ dpkg-deb -b unpack-hostapd hostapd_1%3a2.2_amd64.deb

# now can install the deb
sudo dpkg -i hostapd_1%3a2.2_amd64.deb

관련 정보