프로그램

base-files : rmdir: failed to remove '/var/run': Directory not empty

(주)CKBcorp., 2021. 11. 25. 14:40
반응형

한줄요약 : 패키지 직접 뜯어서, rmdir 부분 날려버림.

 

우분투에서 base-files 패키지를 설치하다가, 아래의 에러가 발생하는 경우가 있다.

 

... 생략 ... 
Extracting templates from packages: 100%
Setting up base-files (7.2ubuntu5.6) ...
rmdir: failed to remove '/var/run': Directory not empty
dpkg: error processing package base-files (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 base-files

 

 

문제는, 이 base-files 는 말 그대로 여기저기서 쓰이는 기본적인 패키지라는 것. 설치를 피할 수가 없다. 

build-essential 패키지를 설치하면, 기본 설치된다. 

그래서 wget, ssh, git 등 오만가지 다 쓰임. 

 

어쨌던, 그래서 어떻게 해결하느냐... 그냥은 해결법이 없다.

 

해당 패키지 이름이 base-files_7.2ubuntu5.6_armhf.deb 

해당 패키지 하위 버전이  base-files_7.2ubuntu5_armhf.deb  이고 ,

상위 버전이 base-files_9.4ubuntu4.13_armhf.deb  인데, 

하위버전 설치해봐도 해결안됨. ( 생각해보니 상위버전은 테스트 안 해 봤다. )

 

에러가 발생하는 원인은, 써있는데로 /var/run 을 지우려다 실패한건데, 

문제는 /var/run 은 시스템에서 사용하는 중요한 디렉토리라, 임시 디렉토리처럼 지우면 안되는거. 

실제로 들어가서 뭐있나 보면 pid 같은거 있다. 

즉, 애초에 지우는거 자체가 말이 안되는거.

 

그래서 어떻게 할까...하다가, 혹시나 해서 패키지를 풀어서 보니, 오류난 부분인 rmdir 부분은 실행이 스크립트로 되어 있더라.  그래서 

 

1. 패키지 풀고

2. 해당 스크립트에서 rmdir 부분만 날리고 

3. 패키지 다시 합쳐서

4. 설치해보니까

5. 설치성공.

 

자세히 쓰자면 아래와 같다.

 

1. 패키지 설치 : 

$ apt-get install base-files 

.... 

Errors were encountered while processing:
 base-files

 

실패. 

 

2. 패키지 상태 확인

$ vi /var/lib/dpkg/status

파일 열어서 base-files 로 검색해 보면, 아래와 같은 부분이 나온다. 

 

...

Package: base-files 

Essential: yes

Status: install ok not-installed   

  - install ok half-configured 라고 써있을 수도 있다.  정상 설치라면 install ok installed 라고 써있다.

...

 

 

3. 패키지 안의 스크립트 검색 : 

문제의 base-files 의 rmdir 부분이 실행되는 스크립트를 찾아가보자.

$ vi /var/lib/dpkg/info/base-files.postinst   <- 패키지 설치 후에 실행되는 스크립트.  

...

migrate_directory()

{

... 

rmdir $1 

...

}

 

스크립트를 rmdir로 검색하면, 아래와 같은 구문이 나온다. 

... 

migrate_directory /var/run /num

migrate_directory /var/lock /run/lock

...

 

해당 부문을 날리고 저장... 해도 소용없는게, 그냥 apt-get 하면 새로 파일 받아 올 뿐이니 의미가 없다.

 

3. 로컬에 다운로드된 패키지를 찾아서 해체하자.

$ cp /var/cache/apt/archives/base-files_7.2ubunutu5.6_armhf.deb /home

라이브러리 만드는 명령어인 ar 로, deb 패키지를 쪼개고 합칠 수 있다. 

dpkg-deb --build 로 빌드하지 말자. 귀찮다. 

패키지를 바닥부터 만드는 게 아니고, 스크립트만 약간 건드릴 거니까, ar 만으로 충분타.

우선, 패키지 정보를 확인해 보자.

$ ar tv /home/base-files_7.2ubunutu5.6_armhf.deb 

john@ubuntu:~/u14packs$ ar tv base-files_7.2ubuntu5.6_armhf.deb
rw-r--r-- 0/0      4 Mar  1 11:27 2019 debian-binary
rw-r--r-- 0/0   3089 Dec 31 16:00 1969 control.tar.gz
rw-r--r-- 0/0  65174 Mar  1 11:27 2019 data.tar.gz

 

패키지를 쪼개자.

$ ar xv /home/base-files_7.2ubunutu5.6_armhf.deb 

x - debian-binary
x - control.tar.gz
x - data.tar.gz

 

필요한건, control.tar.gz 이다. 이걸 압축 풀어서 위의 2.번 작업을 해 주자.

$ tar -xzf  ./control.tar.gz 

$ vi ./postinit

 

2번과 동일하게 

migrate_directory /var/run /num

migrate_directory /var/lock /run/lock

부분을 찾아서 지워주고, 저장한다.

 

4. 파일을 다시 합쳐서 , deb 파일을 만들어주자.

$ tar zcf control.tar.gz ./

$ ar r /home/base-files_7.2ubunutu5.6_armhf.deb control.tar.gz

이제 base-files_7.2ubunutu5.6_armhf.deb 파일은 스크립트가 개조된 패키지다. 용량이 변경된 걸 확인하자.

 

5. 개조한 패키지를 설치

$ dpkg -i base-files_7.2ubunutu5.6_armhf.deb

설치성공.

 

 

 

다행이다...

base-files_7.2ubuntu5.6_armhf.deb.org
0.07MB
base-files_7.2ubuntu5.6_armhf.deb.rmdir_erased
0.07MB

반응형

'프로그램' 카테고리의 다른 글

ubuntu old repository  (0) 2021.12.01
zlib 패키지 -> zlib1g-dev 대체. libtoolize 없으면 -> libtool 대체  (0) 2021.11.25
Kaldi 설치  (0) 2021.11.16
uboot 명령어 요약  (0) 2021.11.15
우분투 20 버전에서 repo 설치  (0) 2021.11.15