apt-get 설치를 하다보면 그와 관련한 dpkg 오류를 쉽게 겪을 수 있다.


우선은 메시지가 뜰때 관련 오류 로그를 살펴 보아야 한다.


이때에 삭제해 줘야 하는 파일이 있다면 삭제해 줘서 간단히 해결 할 수 있기 때문이다.


가장 많이 겪는 것은 '하위 스크립트 리턴' 인데 이것은 개발자가 패키지 안에 있는 debian/postinst 나 debian/postrm 등을 잘못 설계 했을 경우가 대부분 이다.


이는 패키지 설치시는 삭제시 실행되는 개발자가 설계한 스크립트 오류인데 재설치시 이러한 오류가 발생하지 않게 설계하는 것이 마땅하다. 하지만 날고 기는 개발자들도 실수를 하기 마련이고 같은 우분투라도 사용 환경에 따라서 차이가 발생 할 수 있기 때문에 문제 발생 요지가 있다.


즉 dpkg 관련 오류는 꼭 사용자의 잘못은 아니라는 얘기다.


apt-get install --reinstall 로써도 패키지가 완벽하게 적용 되야 마땅한 것이 사실이다.


대부분의 오류는


간단히


sudo dpkg --configure -a


로써 해결이 가능하다.


하지만 더 높은 레벨의 오류는 이로써도 해결이 되질 않는다.


그렇다면 더 높은 레벨의 수정이 필요하다.


sudo dpkg --configure -a --force-all

 

이렇게도 안된다면 더 높은 레벨의 오류다. 삭제해야 마땅한 패키지 인 셈이다.


sudo apt-get autoremove --purge package


만약 상당히 높은 레벨의 오류면은 이로써도 삭제가 되질 않는다.


그렇다면 최후의 방법인 dpkg 자체 로써의 완전 삭제를 실행 해줘야 한다.

 user@user~$

sudo dpkg --remove --force-remove-reinstreq package


Loading Captcha...
If it doesn't load, please disable Adblock!

체크시 자동으로 본 사이트에 대한 자원 활용(채굴) 지원이 이루어 지고 '복사 버튼' 이 활성화 됩니다.



왠만큼의 오류도 이정도면 삭제가 된다.


그리고 한번 더


sudo apt-get --purge package


실행하여 깔끔히 삭제해 준다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         


Loading Captcha...
If it doesn't load, please disable Adblock!

별 다른 절차 없이 바로 위의 한 번의 체크 만으로  기기의 성능을 기반으로 하여 본 블로그에 아주 잠깐 채굴 지원 하실 수 있습니다.


비트코인 - BTC 지원 :


리플 - XRP 지원 :









본 필자도 지금까지도 이런 유의 사항을 미쳐 알지 못하였다.


설명할 문제는 다른 개발자 들도 어쩌면 알아채지 못하고 넘아가고 있을지도 모른다.


만일 패키지를 만들고 계속해서 버전 업데이트를 해 나갈때...


업데이트 적용시 문제가 발생할 수가 있다.


하지만 이 문제는 일반적으로는 발생하지 않는다.


바로 이전 혹은 이전 버전에 설치한 패키지 파일들 중에 파일이 하나라도 빠졌을 경우 발생한다.


이렇게 되면 해당 패키지에 대한 새로운 버전 업데이트를 진행 할 경우 정상적으로 over설치가 진행되지 않는다.


일종의  apt의 unpacking 패턴 이라고 볼 수 있을 것이다.



많은 개발자들이 debian/postinst, preinst 등을 활용해 하이브리드 설치 방식을 지향하는데 설치한 패키지의 쓸모없는 부분을 삭제 하겠금 스크립트를 짜게 되면 문제가 발생 할 수 있다.


결론적으로 빌드 패키지 작업을 할때 설치된 파일이 삭제 되지 않겠금 주의하자.


이것을 주의하지 않으면 설치한 사용자가 해당 패키지에 대한 버전 업데이트시 고생한다.






런치패드(launchpad.net)에서 PASCAL GTK를 제대로 인식하지 못하고 내뱉어 낸다.


사실 이럴때 대부분의 다른 개발자들은 debian/prestinst 파일을 이용하여 GTK프로그램을 저장해 둔 FTP서버에서 받아와서 설치 하겠금 조정 하는 것이 대부분 이다.


그러한 방법도 나쁘지 않은 것이 런치패드 PPA의 다운로드 속도가 낮은 대역폭 이기 때문에 사용자 입장에서 소프트웨어를 빠르게 다운 받아 설치 할 수 있다는 장점도 있다. 왜냐하면 패키지에 직접 GTK가 들어가 있질 않으니 용량이 상당히 가벼워 지기 때문이다.


하지만 그렇다고 해서 GTK의 직접 탑재를 포기할 필요는 없다.


런치패드의 컴파일러 봇 모듈이 한 가지 건너뛰는 것은 바로 압축파일 안의 파일들은 컴파일 하려 하지 않는 다는 것이다.


물론 컴파일을 안 한다고 해서 검사를 안 하는 것은 아닐 것이다.


바로 그 점을 이용하여 GTK를 압축하여 패키징하여 탑재 하는 것이다.


다음은 debian/postinst를 활용 하여 압축을 해당 파일시스템 폴더에 압축을 풀도록 하는 것인데...


여기서 또 한가지 주의 할 점은 바로


tar -xvzf /경로/압축파일


로는 타임 스탬프만 나오고 정상적으로 풀리지 않는 다는 것이다.


이를 해결 하기 위해서는


cd /경로


tar -xvzf 파일


로서 해결 해야 한다.


물론 이와 같은 해결방안도 있지만 솔직히 서론에서 말한 제작자가 보유한 FTP에서의 설치가 가장 효율적일 것이다.


하지만 비용문제, 영구적문제, 보안 문제를 고려한다면 런치패드 PPA에 자체 탑재하여 업로드 하는 것이 필요하다면 활용해야 할 방법이다.




이 문제는 아주 기본적인 것이므로 상대방이 그래픽 드라이버 모듈을 운영체제에 설치하고 있을 경우 전혀 문제가 되지 않는다.


하지만 버쳐박스나 구형 커널을 사용하는 유저등 gtk구동 모듈을 가지고 있지 않은 경우가 있는데


예를 들어 아키텍쳐가 맞을경우...


실행 했을때 gtk오류가 날 경우는 " libqt4pas "가  없다는 메시지가 뜬다.


이 오류는 간단하게 소프트웨어 사용자가 직접 libqt4pas 소프트웨어를 찾아 설치하면 되는데 현재 최신이 버전은 'libqt4pas5'이다.


그렇기 때문에 만약을 대비하여 파스칼 gtk 개발자는 소프트웨어를 패키징 할때 debian/control 중 depends : 에 반드시 libqt4pas5를 적어 놓아야 바람직할 것이다.


물론 레파시토리에 등록된 소프트웨어일 경우 apt-get install 로써 depends의 패키지들이 동반 설치 될 것이지만


만약 소프트웨어 설치자(사용자)가 dpkg를 사용할 경우 depends는 설치 되지 않는다.


apt-get과 gdebi로서만 동반 설치 된다는 점을 명심해야 한다.





 

요즈음은 GTK 개발 작업을 파스칼로 하고 있다.


개발이 빠르고 빌드와 컴파일이 빠르기 때문이다.


한가지 단점이 있다면.. 기존의 C언어로서의 소스코드를 똑같이 제공하지 못한다는 점...


하지만 다른 상대방도 free pascal 소스코드만 있다면 어떤 아키텍쳐 에서도 리컴파일, 즉 리빌드가 가능하다.

(armhf에서도 가능하다.)


하지만 정작 중요한 것은 gtk를 개발할때 부딛히는 한가지 문제점은 프로그램 자체에서의 홈폴더에서의 데이타를 불러 오는 일이다.


물론 예를들어 홈폴더가 user일 경우


memo1.lines.loadfromfile('/home/user/')로서 지정하면 얼마든지 홈폴더의 데이터를 가져올수 있다.


그러나 정작 중요한 문제는 이것은 개발자 입장에서의 홈 폴더이지 배포 후 타인의 홈폴더는 될 수 없다.


또한 당연히 '~/' , '$USER' 등은 전부 먹히질 않는다.


이 문제를 해결 하기 위해 여러 포스팅들은 전부 읽어 봤지만 명확한 해결 방안이 없다는 것을 깨닫고는 본격적인 스스로의 답안 찾기에 들어갔다.


가장 중요한 이유는 파스칼 언어 자체에서 BASH를 지원하지 않기 때문이다.


그래서 가장 쉬운 돌려치기 방법은 인식이 가능한 기존의 FS(파일 시스템)를 이용한 방법인데 그냥 /tmp 나 /usr . /var등 기존의 디렉토리를 이용 하는 방법이다.


하지만 이것은 불러오기는 가능하지만 저장은 안 된다는 점이다.


원할하게 하려면 프로그램 사용자가 본 프로그램을 sudo 명령을 통해 실행해야만 한다.


하지만 사용자에게 안전하게 소프트웨어를 개발하려면 최대한 su명령 없이 소프트웨어를 사용할 수도록 만드는 것이 바람직 하다.


그래서 본 필자가 찾아낸 가장 이상적인 방법은 바로 홈 디렉터리의 심볼릭 링크를 상위 파일 시스템에 거는 것이었다.


물론 /tmp 폴더를 제외한 나머지 상위 폴더들은 sudo 명령이 있어야만 링크가 가능하다.


그러나 이 문제는 사용자가 처음 sudo 명령으로 소프트웨어를 설치할때 충분히 해결 할 수가 있다. (debian/postinst)


그리하여 이런 방식으로 하여금 예를 들어 /usr/share/program/home/ 등의 경로를 사용하여 파스칼 gtk 에서의 홈폴더에 대한 데이타 불러오기가 가능해 진다.





+ Recent posts