2013-06-21 6 views
7

मैं सी पर लिनक्स पर्यावरण (डेबियन-लेनी) में एक प्रोग्राम लिख रहा हूं और एक अपडेट उपलब्ध होने पर प्रोग्राम को अपडेट करना चाहते हैं (कार्यक्रम को अधिसूचित किया जाता है नया अपडेट उपलब्ध है)। मैं एक ऐसे तरीके की तलाश में हूं जो प्रोग्राम स्वयं अपडेट हो सके।लिनक्स सी - एक प्रोग्राम खुद को अपडेट कर सकता है

जो मैं सोच रहा हूं वह यह है कि मुख्य कार्यक्रम अद्यतन को संभालने के लिए एक नया कार्यक्रम आमंत्रित करता है। अपडेटर कार्यक्रम (करने के लिए उपयोग) होगा स्रोत कोड और स्रोत कोड पर बदल जाता है, ऐसा ही कुछ के बारे में अद्यतन जानकारी प्राप्त:

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++;" 

तो, मुख्य प्रक्रिया को मारने के स्रोत कोड पुनः संकलित करें, और उसके बाद की जगह पुराने के साथ नई बाइनरी।

या क्या कोई प्रोग्राम स्वयं को अपडेट करने की क्षमता को लागू करने के लिए एक बेहतर (आसान) और मानक तरीका है?

मैं एक लिनक्स एम्बेडेड बोर्ड के साथ एक सिस्टम को नियंत्रित करने के लिए प्रोग्राम का उपयोग करता हूं। इसलिए, मैं नहीं चाहता कि स्रोत कोड दूसरे व्यक्ति के लिए सुलभ हो (यदि सिस्टम हैक किया गया है या कुछ है)। यदि स्रोत कोड का उपयोग करके प्रोग्राम को अपडेट करने का सबसे अच्छा तरीका है, तो आप स्रोत कोड को सुरक्षित करने के लिए मुझे कैसे सुझाव देते हैं? यदि आप मुझे स्रोत कोड एन्क्रिप्ट करने का सुझाव देते हैं, तो क्या प्रोग्राम फ़ंक्शन (लिनक्स सी) स्रोत फ़ाइल को एन्क्रिप्ट और डिक्रिप्ट करने के लिए उपयोग कर सकता है?

+0

रिमोट सर्वर पर अद्यतन की जांच कैसे करें? क्या यह एक विकल्प है? – Jeff

+0

एक एसवीएन, गिट इत्यादि ट्रंक को अपडेट करने के लिए सबसे आसान हो सकता है और फिर कोड को फिर से कंपाइल कर सकता है, और svn या git आदि गंदे काम करते हैं। – hetepeperfan

+4

मुझे यकीन नहीं है कि मैं इसे सही तरीके से पढ़ रहा हूं, लेकिन यदि आप स्रोत कोड की परवाह करते हैं, तो आपको प्रोग्राम के नए संस्करण को एक सुरक्षित बॉक्स पर संकलित करना चाहिए, और बस बाइनरी भेजें (या क्लाइंट इसे लाने दें)। – Will

उत्तर

9

यदि आपका लक्ष्य सिस्टम डेबियन है, तो आपको अपडेट प्रदान करने के लिए केवल डेबियन पैकेजिंग सिस्टम का लाभ उठाना चाहिए। अपने संकलित एप्लिकेशन को .deb पैकेज में पैकेज करें, इसे अपने एपीटी संग्रह पर वितरित करें जो आपके सिस्टम के sources.list में शामिल है, और केवल apt के साथ एक नियमित अद्यतन जांच शेड्यूल करने के लिए क्रॉन का उपयोग करें। .deb पैकेज में एक पोस्ट-स्थापना स्क्रिप्ट शामिल हो सकती है जो आपके एप्लिकेशन को पुनरारंभ करता है।

आप अपने "गेटवे" नोड्स पर apt-proxy कैशिंग प्रॉक्सी चला सकते हैं जिसमें इंटरनेट एक्सेस है, और अन्य नोड्स इसका उपयोग apt स्रोत के रूप में करते हैं।

इस मामले में स्रोत कोड वितरित करना शायद उचित नहीं है, क्योंकि तब आपको अपने लक्षित सिस्टम पर एक पूर्ण कंपाइलर टूलचैन शामिल करना होगा।

1

जो आप वर्णन कर रहे हैं वह यूनिक्स स्रोत कोड देने की 80 के दशक की शैली के समान है, जो PERL के विकास से लोकप्रिय है। स्रोत-कोड के विभिन्न संस्करणों के बीच परिवर्तनों का रिकॉर्ड प्राप्त करने के लिए आप diff का उपयोग करते हैं, फिर क्लाइंट-एंड पर आवश्यक संशोधन करने के लिए इस "पैच" फ़ाइल को वितरित करें और patch का उपयोग करें। यह नेटवर्क-संचार या संस्करण-नियंत्रण समस्याओं को संबोधित नहीं करता है।

एक संभावित नकारात्मक पक्ष यह है कि पहली बार डाउनलोड को संस्करण लाने के लिए कई पैच लागू करने की आवश्यकता हो सकती है। एनएनटीपी से पुराने स्रोत की जांच करते समय यह अक्सर होता है: comp.sources.unix।

+0

80s-90s यूनिक्स इतिहास पर अद्यतन प्रक्रिया: http://catb.org/esr/writings/taoup/html/ch02s01.html#id2880014 –

संबंधित मुद्दे