क्या स्रोत से डार्विन डिस्ट्रो को संकलित करना संभव है, जैसे आप एक लिनक्स डिस्ट्रो का निर्माण कर सकते हैं?


42

मैंने लिनक्स को स्क्रैच (और बीएलएफएस) से पढ़ा और चलाया है और मैं सोच रहा था कि क्या मैं xnuकर्नेल को प्रतिस्थापित करके डार्विन डिस्ट्रो बनाने के लिए इस गाइड का अनुसरण कर सकता हूं ? क्या एलएफएस में उल्लिखित प्रक्रिया काफी हद तक अलग होगी?

मेरी वर्तमान समझ यह है कि सिस्टम को "लिनक्स" के बजाय "डार्विन" बनाने के लिए आवश्यक कर्नेल प्रतिस्थापन होगा। क्या ये सही है?


संपादित करें:

हत्यारे की टिप्पणी के जवाब में, मैं इस प्रश्न को परिष्कृत करूंगा। जब मैं आम तौर पर इस विषय के बारे में जानकारी की तलाश में हूं, तो मैं विशेष रूप से " डार्विन डिस्ट्रो क्रिएशन गाइड " की तरह कुछ देख रहा हूं, जैसे एलएफएस एक " लिनक्स डिस्ट्रो क्रिएशन गाइड " है।

मैं इस बात की सराहना करता हूं कि इस तरह की जानकारी संभवत: केवल Puredarwin , OpenDarwin या GNU / Darwin के लोगों की ओर से आएगी , इसलिए यह उनके लिए मदद के लिए एक कॉलआउट है। LFS की तरह एक " हाउ-वी-मेड-प्योरडर्विन-नैनो-स्टार्ट-फिनिश " गाइड एकदम सही होगा, लेकिन मुझे पता है कि बहुत कुछ पूछ रहा है।


3
शायद यह देखने के लिए कि क्या एक डार्विन आधारित डिस्ट्रो (और वे समस्याओं और इस में सामना करना पड़ा) के निर्माण में चला जाता है देखने के लिए puredarwin देखने लायक है
जर्नीमैन

1
उपयोगकर्ता के लिए नियमित रूप से दोनों कर्नेल बहुत समान दिखते हैं, लेकिन कर्नेल को प्रबंधित करने के लिए उपयोग किए जाने वाले सॉफ़्टवेयर और इसके साथ जुड़े सॉफ़्टवेयर (libc सहित) काफी भिन्न होते हैं। LFS प्रलेखन इस महत्वपूर्ण पहले चरणों में ज्यादा मदद नहीं करेगा। शायद डेबियन के kFreeBSD शाखा से शुरू (या कम से कम अध्ययन) अधिक प्रासंगिक है।
वॉनब्रांड

1
संकेत: यदि आप वास्तव में एक सवाल कर रहे हैं कि आप क्या करने की कोशिश कर रहे हैं, तो आप दोनों पहले से मौजूद सवालों में एक हिट खोजने की संभावना बढ़ाते हैं, लेकिन साथ ही यह संभावना भी बढ़ाते हैं कि यह प्रश्न का उत्तर देने के लिए विचारों से अधिक लोगों को आकर्षित करेगा। । जैसा कि भ्रमित होने का विरोध किया जाता है कि प्रश्न वास्तव में क्या है। सिर्फ एक विचार।
हत्यारे

1
डार्विन कुछ हद तक बीएसडी पर आधारित है, जो लिनक्स से अलग है। चीजों को करने का बीएसडी तरीका केवल कर्नेल की तुलना में अधिक चीजों में अलग है (फाइलसिस्टम प्राथमिकताएं, निर्देशिका संरचना, उन्नयन नीति, आदि)।
18

2
बाइनरी संगत होना एक ही बात नहीं है, मुझे डर है। @Vesperto सही है, डार्विन लिनक्स की तुलना में बीएसडी परिवार से अधिक निकटता से संबंधित है; अन्य बीएसडी की तुलना में निश्चित रूप से अलग कर्नेल के साथ। मुझे लगता है कि आपके पास एक एलएफएस आधारित एक की तुलना में बीएफएस प्रकार के गाइड की तलाश में बेहतर भाग्य होगा। बीएसडी हैंडबुक एक और अच्छा संदर्भ स्रोत होगा। इसके लिए आपको प्रासंगिक जानकारी के लिए अपने डार्विन संदर्भों का उपयोग करना होगा।
जेरी डब्ल्यू जैक्सन

जवाबों:


32

अपडेट 19 अप्रैल 2015:

दो साल बाद भी इस क्षेत्र में बहुत कम रुचि दिखाई देती है। हालांकि, हैकिन्टोश समुदाय अभी भी अत्यधिक सक्रिय है, जिसका अर्थ है कि कुछ खुले स्रोत गैर-ऐप्पल बूटलोडर्स में से एक जो बूटिंग विष्णु (गिरगिट और कांटे) को बूट करने में सक्षम है और अभी भी योसमाइट को बूट कर सकता है। QEMU के भीतर OS X Yosemite को बूट करने वाली सफलता की कहानियां भी हैं। इसके अलावा, एक (अब Apple- नियोजित) डेवलपर के लिए धन्यवाद जो हैंडल विनोकम से जाता है , हमारे पास एक्सयू कर्नेल का एआरएम पोर्ट है । वह सबसे सक्रिय डेवलपर रही है जो मुझे इस क्षेत्र में पता है।

जल्द ही अमित सिंह के मैक ओएस एक्स इंटर्नल का सीक्वल भी आने वाला है। मैं आमतौर पर लोगों के निजी पृष्ठों का उल्लेख करना पसंद नहीं करता; हालाँकि, सभी जानकारी वाला ब्लॉग सर्वर थोड़ा अविश्वसनीय है, इसलिए ameaijou के ट्विटर पेज पर जानकारी बॉक्स देखें ।

मैं Apple के डेवलपमेंट टूलचैन (एक सेल्फ-होस्ट, हालांकि "डार्विन एसडीके" को भी लिनक्स में पोर्ट किया गया है ) बनाने में कामयाब रहा हूं । मेरा मानना ​​है कि एक डार्विन ओएस अभी तक खरोंच से निर्माण करना संभव हो सकता है - हम सभी के बारे में याद कर सकते हैं कुछ ओपन-सोर्स केक्स हैं। इस स्थान को देखें, और यदि आप जानते हैं कि ब्याज कैसे निकालना है, तो मुझे बताएं! :)


इस प्रश्न के संक्षिप्त उत्तर:

तकनीकी रूप से: हाँ

व्यावहारिक रूप से: नहीं *

द्विआधारी धोखा देती है: संभवतः, लेकिन कानूनी (अप्रयुक्त) भी नहीं

सामान्य हार्डवेयर के लिए द्विआधारी धोखा देती है: जैसा कि ऊपर (अप्रयुक्त)

* जब तक आप Apple में काम नहीं करते (* कैलिफोर्निया की सामान्य दिशा में गला साफ करते हैं) *


दीर्घ उत्तर:

यह लंबा होने जा रहा है। मैं कॉफी का सुझाव देता हूं। यदि आपके पास यह पढ़ने के लिए समय / झुकाव नहीं है, तो आप "रिमार्क्सिंग को छोड़कर" को छोड़ सकते हैं।

व्यावहारिक रूप से संभव (नहीं):

अफसोस की बात है कि, Apple ने डार्विन के कई आवश्यक टेक्सटाइल्स और बायनेरिज़ के स्रोत कोड को वापस ले लिया है ताकि डार्विन OS का संकलन शुद्ध रूप से संभव हो सके। यह अभी भी तकनीकी रूप से संभव है (आप इसे ठीक से पैच अप करने के लिए स्रोत स्वयं लिख सकते हैं), लेकिन मेरे पास ऐसा करने के लिए समय, कौशल या झुकाव नहीं है (और मुझे संदेह है कि भीड़ फंडिंग समुदाय बहुत रुचि रखेगा)।

अप्रत्याशित रूप से प्रमुख टिपिंग बिंदु डार्विन 10 का विमोचन था, जिसने xnu को x86_64-land में लाया। अधिकांश आवश्यक स्रोत तब से पहले के आसपास थे, लेकिन केवल x86 थे। जैसे-जैसे समय बीतता जा रहा है, Apple के "Open Source" का अर्थ "Apple के हार्डवेयर पर ओपन सोर्स" में स्थानांतरित हो गया है, क्योंकि Apple के KEXTs अब बाय-एंड-लार्ज हार्डवेयर-विशिष्ट हैं, इसलिए भले ही आप सब कुछ पा सकें और चल रहा है (नीचे देखें) आप अभी भी Apple हार्डवेयर तक ही सीमित रहेंगे।

तकनीकी रूप से संभव (हाँ):

वैसे, सबकुछ नष्ट नहीं हुआ है। एलएफएस गाइड काम में नहीं आया और निश्चित रूप से सभी आवश्यक सेटअप वास्तव में डार्विन ओएस के निर्माण के बिना आयोजित किए जा सकते हैं। इसके अलावा प्रस्तुत किए गए कदम आपको मार्ग का लगभग-सटीक रोडमैप प्रदान करते हैं, कर्नेल, KEXTs और बूटलोडर को घटाते हैं। मैंने बूटलोडर समस्या को हल करने का प्रबंधन किया, हालांकि (कम से कम Apple हार्डवेयर के लिए)।

यदि आप रुचि रखते हैं, तो आपको क्या करना है, इसका पूरा अवलोकन यहां दिया गया है:

  • एक ड्राइव (आंतरिक या बाहरी - कोई फर्क नहीं पड़ता) पर एक विभाजन (8 जीबी या अधिमानतः) मिटा दें और इसे मैक ओएस एक्सटेंडेड (जर्नलेड) (एचएफएस +) के रूप में प्रारूपित करें।
  • सुनिश्चित करें कि इसमें एक GUID विभाजन तालिका (GPT) है और जब आप ऐसा करते हैं तो इसमें EFI विभाजन होता है। ऐसा करने का सबसे आसान तरीका ऐप्पल की डिस्क उपयोगिता के माध्यम से है, लेकिन आप इसे कमांड लाइन पर कर सकते हैं यदि आप चाहते हैं (ऐसा करने के तरीके पर कहीं और ट्यूटोरियल हैं)। महत्वपूर्ण बिंदु यह है कि जब आप दौड़ते हैं distil list diskNsM, तो निम्नलिखित जानकारी सही होनी चाहिए:

    विभाजन प्रकार: Apple_HFS

    ओएस स्थापित किया जा सकता है: हाँ

    पढ़ें- केवल मीडिया: नहीं

    केवल-पढ़ने के लिए वॉल्यूम: नहीं

  • अब एलएफएस गाइड (अनुकूलन के साथ) का पालन करने के लिए।

  • सम्मिलित करें (वास्तविक माउंट बिंदु का उपयोग करके, जाहिर है) औरDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • उपयोगकर्ता निर्देशिका बनाएं ( chownयह बहुत अंत में 0: 0 पर है):

    sudo mkdir -v "$DFS"/usr
    
  • दर्ज करें root:

    sudo su -
    
  • स्रोत निर्देशिका बनाएं और चिपचिपा सा सेट करें:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • उपकरण निर्देशिका बनाएं और इसे एक सिमलिंक बनाएं ताकि हम इसे बाद में $ PATH में आसानी से जोड़ सकें (अभी भी rootवैसे):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • अपने इच्छित सभी पैकेजों के स्रोत को डाउनलोड करें। यह निश्चित रूप से, जहां आप फंस जाते हैं। सभी आवश्यक नहीं हैं। (संयोग से, मैं जीएनयू को binutilsवैसे भी पसंद करता हूं ।)

आप वास्तव में आप की जरूरत है सभी को डाउनलोड कर सकते हैं मान लें, चलो पर दबाएँ।

  • विशेष रूप से डीएफएस (एलएफएस द्वारा सुझाए गए) के लिए एक अल्प विकसित उपयोगकर्ता बनाएं:

    sudo dscl . -create /Users/lfs
    sudo dscl . -create /Users/lfs UserShell /bin/bash
    sudo dscl . -create /Users/lfs RealName "LFS DFS"
    sudo dscl . -create /Users/lfs UniqueID "2070"      # whatever you like
    sudo dscl . -create /Users/lfs PrimaryGroupID 20    # Default 'staff'
    sudo dscl . -create /Users/lfs NFSHomeDirectory /Users/lfs
    sudo dscl . -passwd /Users/lfs dfs          # Again to taste.
    
  • ध्यान दें कि आपको नए उपयोगकर्ता का होमडियर स्वयं मैक पर बनाना होगा:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • अब नए उपयोगकर्ता को स्रोतों और उपकरणों तक पहुंच प्रदान करें

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • लॉग इन करें:

    su - lfs
    Password: dfs
    
  • पर्यावरण को साफ करने के लिए निम्न आदेश चलाएँ (LFS से):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • अब निम्नलिखित कमांड चलाएँ (यदि आप निश्चित नहीं हैं तो LFS देखें कि यह क्या करता है):

    cat > ~/.bashrc << "EOF"
    set +h
    umask 022
    DFS=/Volumes/*DarwinOS*     # As previously
    LC_ALL=POSIX
    LFS_TGT=$(uname -m)-dfs-darwin1242  # Look inside gcc/configure for possibilities!
    PATH=/tools/bin:/bin:/usr/bin       # Note symlink from before
    export LFS LC_ALL LFS_TGT PATH
    echo ".bashrc script complete. Environment is ready."
    EOF
    
  • जीसीसी /configureकाफी लचीला है। *-पैटर्न को टटोलने का प्रयास करें , या बस gcc -vयह देखने के लिए दौड़ें कि आपकी मेजबान मशीन को कैसे कॉन्फ़िगर किया गया था और इसे कॉपी करें।

  • अब lfs उपयोगकर्ता का लॉगआउट करें और वापस लॉग इन करें। अब आपके पास एक स्वच्छ वातावरण होना चाहिए।
  • अब से सब कुछ lfs उपयोगकर्ता के अंदर होता है। आप देखेंगे कि मैं केवल 'LFS' प्रतीकों को 'DFS' प्रतीकों में परिवर्तित करने में थोड़ा आलसी था। इसके बारे में क्षमा करें, लेकिन आपको इसका विचार है।

ठीक है अब काल्पनिक खंड में।

यहाँ से यह बहुत अच्छी तरह से मानक एलएफएस प्रक्रिया होने जा रही है: स्रोत निकालें, निर्माण, स्थापित करें, परीक्षण करें, स्रोतों को हटाएं। ध्यान दें कि बिनुटिल्स के 2 पास, जीसीसी और ग्लिबक अभी भी आवश्यक हैं लेकिन आपको यह भी काम libc++.1.dylibकरना होगा - और आपको 2 पासों में भी ऐसा करना होगा। आप कुछ और विवरणों के लिए LLVM प्रोजेक्ट का libcxx पेज देख सकते हैं । एक बार संकलित करने के बाद, आप इसे अंदर रख सकते हैं /usr/lib। आपको xnu कर्नेल को संकलित करने और स्थापित करने की आवश्यकता होगी ( ऐसा करने के लिए वेब के आसपास कुछ ट्यूटोरियल हैं) और फिर KEXT को स्थापित करें। यहां तक ​​कि अगर सभी आवश्यक KEXT उपलब्ध थे, तो भी आपको उन्हें हाथ से .kext पैकेज में रखना होगा। फिर से कमांड लाइन पर KEXT को कैसे हैंड-क्राफ्ट करना है, इसके लिए ट्यूटोरियल हैं

अंतिम बिट सिस्टम को बूट करने योग्य बनाता है। ऐसा करने के लिए, आप निम्नलिखित कमांड चलाएंगे:

 "$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose

वास्तव में आशीर्वाद देने का स्थान वास्तव में फर्क नहीं करता है। वह फ़ोल्डर सिर्फ Apple-standard है।

किसी भी स्थिति में, कर्नेल और टेक्सट को सही स्थानों पर मानते हुए, आपके पास जगह आदि की उचित प्रतियां थीं dyld, launchdऔर boot.efiसही तरीके से काम कर रहा था, सिस्टम को काम करना चाहिए और बूट करने योग्य होना चाहिए!

ध्यान दें कि यदि आप वास्तव में चाहते थे कि आप एक फॉक्स चला सकें- launchdतो बस बैश प्रॉम्प्ट चलाने के लिए एक स्क्रिप्ट है - यही प्योरडर्विन नैनो करता है।

फिर, हर तरह से, kexts और बाइनरी खुद के बारे में अगर आप की तरह है - यह है तकनीकी रूप से संभव। जब आप काम पूरा कर लें तो मुझे फोन करें।


द्विआधारी धोखा देती है: संभवतः, लेकिन कानूनी (अप्रयुक्त) भी नहीं

तो, आप सिर्फ माउंटेन शेर से बाहर बायनेरिज़, टेक्सट और आवश्यक फ़ाइलों को चीर क्यों नहीं कर सकते हैं, वॉल्यूम को आशीर्वाद दें और जाएं? खैर, आप शायद कर सकते हैं। लेकिन ऐसा करने के लिए आपको लाइसेंस की भी आवश्यकता होती है। इसके अलावा, यदि आप ऐसा करते हैं, तो आपने मूल रूप से माउंटेन शेर की एक प्रति बनाई है। उस बिंदु के बगल में नहीं है?

सामान्य हार्डवेयर के लिए द्विआधारी धोखा देती है: जैसा कि ऊपर (अप्रयुक्त)

यह काफी है osx86 परियोजना। फिर आप बहुत सीधे कानूनी मुद्दों में भाग जाते हैं। इसमें कोई सवाल नहीं है कि ये अंतिम दो तरीके निश्चित रूप से संभव हैं - यह तथ्य कि आप जेनरिक हार्डवेयर पर माउंटेन लायन को चला सकते हैं, इस बात का प्रमाण है - लेकिन इसका पूरा बिंदु आपके डार्विन ओएस को स्रोत से वैध रूप से संकलित करने में सक्षम होना था।


पक्षीय लेख

आपने देखा होगा कि मैंने जानबूझकर कुछ भी 32-बिट से परहेज किया है। एक ऐसी दुनिया में जहाँ हर प्रमुख OS 64-बिट में उपलब्ध होता है, 32-बिट को संकलित करने में ज्यादा फायदा नहीं होता है। Apple ने वास्तव में डार्विन की डिस्क छवियां प्रदान कीं (डार्विन 9 तक) यहां । उन्होंने पूरी तरह से मेरे विंडोज बॉक्स पर काम किया।

समापन टिप्पणी

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

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


1

जाहिर है, आपने माना है कि एलएफएस लिनक्स के लिए है और डार्विन लागू किए गए लिनक्स एलएफएस से बहुत भिन्न है, इसलिए एलएफएस को डार्विन सिस्टम पर लागू करने के आपके एकल व्यक्ति के प्रयासों से परे यह सरल है।

डार्विन प्रणालियों को बदलने / सुधारने के लिए कई सामुदायिक प्रयास हैं। जबकि OpenDarwin परियोजना बहुत सफल नहीं है, लगता है कि Apple द्वारा कोड बहुत कठिन है, जबकि अभी भी एक परियोजना PureDarwin शेष है:
PureDarwin SourceForge
PureDarwin HomePage

पहले एक डेवलपर खाता प्राप्त करें, उनके बिल्ड टूल को पकड़ो, फिर आप अपने स्वयं के कस्टम कर्नेल बनाने के चरण प्राप्त कर सकते हैं।

डार्विन कर्नेल लिनक्स कर्नेल के साथ समान वास्तुकला नहीं रखते हैं, इसलिए, इसे लिनक्स कर्नेल के साथ प्रतिस्थापित नहीं किया जा सकता है, इसलिए आपको इसे संकलित करने की आवश्यकता है।

वास्तव में आपको बस इतना करना होगा कि 100% PureDarwin परियोजना के साथ रहना है, फिर निम्नलिखित स्क्रिप्ट को कॉल करें: Google कोड - आपके द्वारा बनाई गई कस्टम कर्नेल छवियों के साथ शुद्ध डार्विन स्विच कर्नेल ठीक हो जाएगा।

लेकिन एक अच्छा काम करने वाले डार्विन कर्नेल के निर्माण के बारे में, यह एक नया प्रश्न होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.