런치 패드 ppa에 업로드를 하면서 심각한 버그 하나를 발견하게 되었다.


그것은 다름 아닌 PPA에 업로드하고 홈페이지 자체에서 인공지능 컴파일이 이루어 지고 있는 과정 중에 패키지를 삭제 하게 되면

다음 업로드가 이루어 지지 않는 버그 이다.


0.01 사이의 버전을 변경 하여도 이름만 같아도 런치패드가 'orig.tar.xz'파일의 변동의 인식 하지 못하고 이전의 파일만 기억해 무조건 같다고 처리하여 내뱉어 버리는 것이다.


아직 0.1 사이의 버전을 변경하지 않았기 때문에 확실히 모르지만


그 전에는 같은 레파시토리에 업로드 하는 것은 불가능 하다는 것을 알게 되었다.


즉 런치패드에서 패키지를 삭제 할때는 인공지능 컴파일 & 빌드가 다 끝난 다음 해야 된다.


차라리 냅두고 다음 버전을 로그체인지 하여 업로드 시키는 것이 더욱 낫다고 볼 수 있다.



'orig.tar.xz' 파일 생성은


{ dh_make -c gpl --createorig } 명령과 직접적인 관계점이 있는데 이 orig 파일 생성 에서도 버그가 존재 한다는 것을 알게 되었다.


바로 실제 패키지의 라이브러리 디렉토리들이 변경이 되었어도 이전 정보로만 'orig.tar.xz' 파일을 만드는 버그 이다.


이 버그는 일일이 확인 하지 않는 이상 개발자는 까맣게 모를 수도 있다.


이 버그를 해결하려면 구축한 debian/ 폴더의 파일들을 백업해 놓고 debian/ 폴더를 완전히 삭제한후 { dh_make -c gpl --createorig } 명령을 통해 재갱신 한 다음에 백업한 파일들을 debian/ 폴더에 다시 갈아 치워야 한다.


하지만 이 버그는 무조건 항시 발생하는 것은 아니기에


아직 본인도 발생하는 이유와 원인에 대해서는 알지 못했다.



<< glotto-k 소프트웨어 버전 0.5 배포 계획 >>

title:               


'Gnu Lotto - Korea'



name  :          

 glotto-k



version  :      

   0.5



section  :       


  utils

개발 완료 및 배포 예정  :       

  


6월 24

 

say :     


본 소프트웨어는 대한민국의 6/45 로또 번호를 컴퓨터의 의사난수를 이용하여 사용자가 원하는 변수, 현재 시간들을 조합해 출력해 내는 프로그램 입니다.




지원 아키텍쳐 :


64bit, 32bit


지원 운영체제 :


linux ubuntu - xenial, wily, vivid, trusty, 리눅스 민트도 설치가능.


PPA :                


cosmosp2016/glotto-k  


launchpad :    


launchpad.net/~cosmosp2016

Author :         


C O S M O S Project



업데이트예정 사 항 :


1. 소스 업그레이드


2. 기초통계 소스파일 추가 하고 계산 하여 추가 하는 기능 추가


3. 홀짝 자동 계산 (이전 회차 당첨번호 입력시)


4. 데스크탑 실행 아이콘 추가


5. 섹션 변경 : utils -> games


     

개발 및 배포 완료


바로가

  


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


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


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


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


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


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


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


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



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


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


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






lcl이 없어 만든 프로그램을 시험 실행 조차 되지 않을 수 있다.


이와 같은 경우는 기존의 kr.archive.ubuntu 레파시토리에서 직접 라자루스를 설치한 경우인데


사실 기존의 라자루스 홈페이지 보다는 관련소스가 훨씬 더 많은 것이 사실 이다.


하지만 라자루스 설치시 depends가 지정 되어 있지 않기 때문에 관련 패키지들이 전부 설치 되지 않는 다는 점이 헛점이다.


해결 방안은 아주 간단하다.


sudo apt-get install lcl*


이라면 우선 lcl 문제를 해결 할 수 있을 듯 보이지만 온전한 컴파일을 위해서는 free pascal compiler 를 설치 해야한다.


일명 fpc 패키지 이다.


이것은 시냅틱으로 전부 찾아 설치하도록 하자.


심지어 시냅틱에 'pascal' 이라고 쳤을때 관련 패키지가 더 나올 것이다.


전부 설치 하는 것이 바람직 하다.



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


하지만 버쳐박스나 구형 커널을 사용하는 유저등 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