2013-06-21 1 views
7

리눅스 환경 (데비안 - 레니)에서 C로 프로그램을 작성 중이며 업데이트가있을 때 프로그램을 업데이트하고 싶습니다. 새 업데이트를 사용할 수 있음). 프로그램 자체를 업데이트 할 수있는 방법을 찾고 있습니다.리눅스 C - 프로그램이 스스로 업데이트 할 수있는 기능 구현하기

내가 생각하는 주요 프로그램은 업데이트를 처리하기 위해 새 프로그램을 호출하는 것입니다. 업데이터 프로그램은 소스 코드를 (액세스)가 소스 코드의 변경, 그런 일에 대한 업데이트 정보를 수신합니다 :

edit1: line 20, remove column 5 to 20; 
edit2: line25, remove column 4-7 then add "if(x>3){" from the column4 
edit3: line 26, enter a new line and insert "x++;" 

다음, 주요 프로세스를 종료 소스 코드를 컴파일 한 후 교체 이전 바이너리와 새로운 바이너리.

또는 프로그램이 자체적으로 업데이트 할 수있는 기능을 구현하는 데 더 나은 (더 쉽고) 표준 방법이 있습니까?

이 프로그램을 사용하여 Linux 임베디드 보드가있는 시스템을 제어합니다. 따라서 소스 코드를 다른 사람이 액세스 할 수 없도록하려는 경우 (시스템이 해킹 당하거나 뭔가가있는 경우). 소스 코드를 사용하여 프로그램을 업데이트하는 가장 좋은 방법이 있다면 소스 코드의 보안을 어떻게 제안합니까? 내가 소스 코드를 암호화하도록 제안했다면, 프로그램이 소스 파일을 암호화하고 해독하기 위해 어떤 기능 (Linux C)을 사용할 수 있습니까?

+0

원격 서버에서 업데이트를 확인하는 방법은 어떻습니까? 그게 선택의 여지가 있니? – Jeff

+0

은 svn, git etc 트렁크를 업데이트 한 다음 코드를 다시 컴파일하고 svn 또는 git 등을 사용하여 더러운 작업을 수행하는 것이 가장 쉽습니다. – hetepeperfan

+4

잘 읽었는지 모르겠지만 소스 코드를 신경 쓰면 보안 상자에 프로그램의 새 버전을 컴파일하고 바이너리를 보내야합니다 (또는 클라이언트가 가져 오도록하십시오). – Will

답변

9

대상 시스템이 데비안 인 경우 데비안 패키지 시스템을 활용하여 업데이트를 제공해야합니다. 컴파일 된 응용 프로그램을 .deb 패키지로 패키지하고 시스템의 sources.list에 포함 된 APT 아카이브에 배포하고 cron을 사용하여 정기적 인 업데이트 확인을 apt으로 예약하십시오. .deb 패키지에는 응용 프로그램을 다시 시작하는 설치 후 스크립트가 포함될 수 있습니다.

인터넷에 액세스 할 수있는 "게이트웨이"노드에서 apt-proxy 캐싱 프록시를 실행하고 다른 노드에서 해당 주소를 apt 소스로 사용할 수 있습니다.

이 경우 소스 코드를 배포하는 것은 적절하지 않습니다. 타겟 시스템에 전체 컴파일러 도구 체인을 포함해야하기 때문입니다.

1

당신이 설명하는 것은 Perl의 개발로 대중화 된 유닉스 소스 코드를 제공하는 80 년대 스타일과 매우 유사합니다. diff을 사용하여 서로 다른 버전의 소스 코드간에 변경 사항을 기록한 다음이 "패치"파일을 배포하고 patch을 사용하여 클라이언트 측에서 필요한 수정을 수행합니다. 이 문제는 네트워크 통신 또는 버전 제어 문제를 해결하지 못합니다.

가능한 한 처음으로 다운로드하면 여러 버전의 패치를 적용해야 할 수 있습니다. 이는 nntp : comp.sources.unix에서 오래된 소스를 조사 할 때 자주 발생합니다.

+0

80s-90s 유닉스 기록 : http://catb.org/esr/writings/taoup/html/ch02s01.html#id2880014 –