Red Hat और CentOS के प्रमुख संस्करणों के बीच उन्नयन करना इतना कठिन क्यों है?


72

"क्या हम अपने मौजूदा उत्पादन EL5 सर्वर को EL6 में अपग्रेड कर सकते हैं?"

पूरी तरह से अलग-अलग वातावरण वाले दो ग्राहकों से एक साधारण-सा लगने वाला अनुरोध मेरे सामान्य सर्वोत्तम व्यवहारों का जवाब देता है "हां, लेकिन इसके लिए आपके सभी प्रणालियों के समन्वित पुनर्निर्माण की आवश्यकता होगी " ...

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

मैं कॉन्फ़िगरेशन प्रबंधन के बारे में प्रतिक्रियाओं को हटाने की कोशिश नहीं कर रहा हूं (" सब कुछ हमेशा लागू न करें " या ग्राहकों को बेहतर तरीके से योजना कैसे बनाना चाहिए। यह वातावरण का एक वास्तविक दुनिया उदाहरण है जो एक उत्पादन क्षमता में विकसित और संपन्न हुआ है, लेकिन अपने ओएस के अगले संस्करण में जाने के लिए एक साफ रास्ता नहीं दिखता है।

पर्यावरण ए: 40 x रेड हैट एंटरप्राइज लिनक्स 5.4 और 5.5 वेब, डेटाबेस सर्वर और मेल सर्वर के
साथ गैर-लाभकारी संगठन , जो जावा वेब एप्लिकेशन स्टैक, सॉफ्टवेयर लोड बैलेंसर्स और पोस्टग्रेज डेटाबेस चला रहा है। सभी प्रणालियों को विभिन्न स्थानों पर दो VMWare vSphere समूहों पर वर्चुअलाइज्ड किया जाता है, प्रत्येक में HA, DRS इत्यादि।

एन्वायर्नमेंट बी: प्रोडक्शन ट्रेडिंग ऑपरेशंस चलाने वाले कई को-लोकेशन फैसिलिटीज में 200 x सेंटोस 5.x सिस्टम के
साथ हाई-फ्रिक्वेंसी फाइनेंशियल ट्रेडिंग फर्म , इन-हाउस डेवलपमेंट और बैक-ऑफिस फंक्शंस को सपोर्ट करता है। ट्रेडिंग सर्वर नंगे-धातु कमोडिटी सर्वर हार्डवेयर पर चल रहे हैं। उनके पास मैसेजिंग को कम करने के लिए कई , इंटरप्ट बाइंडिंग और ड्राइवर ट्विक्स हैं। कुछ में कस्टम और / या रीयलटाइम गुठली है। डेवलपर कार्यस्थान भी CentOS का एक समान संस्करण चला रहे हैं।sysctl.confrtctl


दोनों ही मामलों में, वातावरण ठीक-ठाक चल रहा है। उन्नयन की इच्छा ईएल 6 में उपलब्ध एक नए आवेदन या सुविधा की आवश्यकता से आती है।

  • गैर-लाभकारी फर्म के लिए, यह अपाचे, कर्नेल और कुछ चीजों से बंधा हुआ है जो डेवलपर्स को खुश करेंगे।
  • ट्रेडिंग फर्म में, यह कर्नेल, नेटवर्किंग स्टैक और GLIBC में कुछ वृद्धि के बारे में है, जो डेवलपर्स को खुश कर देगा।

दोनों ऐसी चीजें हैं जिन्हें आसानी से पैक नहीं किया जा सकता है या ऑपरेटिंग सिस्टम में भारी बदलाव किए बिना अपडेट किया जा सकता है

एक सिस्टम इंजीनियर के रूप में, मैं सराहना करता हूं कि प्रमुख संस्करण रिलीज़ के बीच चलते समय Red Hat पूर्ण पुनर्वित्त की सिफारिश करता है। एक साफ शुरुआत आपको रिफ्लेक्टर के लिए मजबूर करती है और रास्ते में कॉन्फ़िगर करने पर ध्यान देती है।

ग्राहकों की व्यावसायिक आवश्यकताओं के प्रति संवेदनशील होने के नाते, मुझे आश्चर्य है कि इस तरह के एक महत्वपूर्ण कार्य की आवश्यकता क्यों है । RPM पैकेजिंग सिस्टम इन-प्लेस अपग्रेड को संभालने में सक्षम से अधिक है, लेकिन यह आपको प्राप्त होने वाले छोटे विवरण हैं: /bootअधिक स्थान, नए डिफ़ॉल्ट फाइल सिस्टम की आवश्यकता होती है, RPM संभवतः मिड-अपग्रेड, पदावनत और अशुद्ध संकुल को तोड़ रहा है ...

यहाँ क्या जवाब है? अन्य वितरण (.deb-based, Arch और Gentoo) में यह क्षमता या एक बेहतर मार्ग है। मान लें कि हम इस कार्य को सही तरीके से पूरा करने के लिए डाउनटाइम पाते हैं :

  • EL7 जारी होने और स्थिर होने पर इन ग्राहकों को उसी समस्या से बचने के लिए क्या करना चाहिए?
  • या यह एक ऐसा मामला है, जहां लोगों को हर कुछ वर्षों में पूर्ण रूप से पुनर्निर्मित करने के लिए खुद को इस्तीफा देने की आवश्यकता होती है?
  • ऐसा लगता है कि एंटरप्राइज़ लिनक्स विकसित हो गया है ... या क्या मैं सिर्फ इसकी कल्पना कर रहा हूं?
  • क्या इसने Red Hat और व्युत्पन्न ऑपरेटिंग सिस्टम का उपयोग करने से किसी को मना किया है?

मुझे लगता है कि वहाँ विन्यास प्रबंधन कोण है, लेकिन अधिकांश कठपुतली स्थापनाएं मैं देख रहा हूं कि अत्यधिक अनुकूलित अनुप्रयोग सर्वरों के साथ वातावरण में अनुवाद नहीं होता है ( पर्यावरण बी में एक एकल सर्वर हो सकता है जिसका ifconfigआउटपुट इस तरह दिखता है )। हालांकि, एचआरईएल प्रमुख संस्करण टक्कर से संगठनों को प्राप्त करने में मदद करने के लिए कॉन्फ़िगरेशन प्रबंधन का उपयोग कैसे किया जा सकता है, इस पर सुझाव सुनने में मुझे दिलचस्प लगेगा।


16
मैं इसे "रचनात्मक नहीं" के रूप में बंद करने के लिए चिह्नित करने वाला था, जब मैंने लेखक का नाम और प्रतिनिधि देखा था, और सम्मान से बाहर मैं ऐसा नहीं कर रहा हूं। मुझे अभी भी लगता है कि यह एक मूर्खतापूर्ण प्रश्न है, क्योंकि इसका उत्तर यह है कि "रेड हैट ने फैसला किया कि ऐसा होना चाहिए"। 4-> 5 उन्नयन डीवीडी बूट के माध्यम से पूरी तरह से संभव थे, और इसका उपयोग करने के लिए एक लाइव ओएस करने के लिए प्रक्रियाएं थीं yum, जो कि मेरे लिए सबसे अधिक समय तक काम करती थीं । मेरी एकमात्र आशा यह है कि आरएच ने अपने भुगतान ग्राहकों से दर्द की छड़ी की एक बड़ी हिट ले ली है , उनके निर्णय के लिए कोई उन्नत अपग्रेड पथ 5-> 6 नहीं है, और इसे 6-> 7 के लिए पुनर्विचार करेगा।
मदहैटर

1
उस ने कहा, क्या आप जानते हैं कि C5-> C6 से upgradeanyबूट-टाइम पैरामीटर का उपयोग करके वर्किंग असमर्थित अपग्रेड पथ है ? मैंने इसे दो बार परीक्षण किया है, एक बार एक साफ सी 5 इंस्टॉल पर जहां यह ठीक काम करता है; एक बार एक (crufty पुराने "की परीक्षण प्रति" C4 हुआ करती थी और उसे उन्नत बनाया गया था "जहां यह नाटकीय रूप से विफल रही।
मदहैटर

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

जवाबों:


42

(लेखक का नोट: यह उत्तर RHEL 6 और पूर्व संस्करणों को संदर्भित करता है। RHEL 7 में अब RHEL 6 से पूरी तरह से समर्थित अपग्रेड पथ है, जिसका विवरण अंत में है।)


शुरू करने के लिए, मुझे ध्यान देना चाहिए कि इन-प्लेस अपग्रेड करने के दो तरीके हैं :

  1. स्थापना डीवीडी में ड्रॉप करें (या iLO / iDRAC के माध्यम से डीवीडी छवि का उपयोग करें), इससे बूट करें और अपग्रेड चुनें, उदा linux upgradeany
  2. redhat-releaseआरपीएम को मैन्युअल रूप से अपडेट करें , चलाएं yum distro-sync(यह थोड़ा ओवरसाइज्ड है) और रिबूट करें।

विधि 1 केवल असमर्थित है। विधि 2 रियल काउबॉय के लिए है। अनुशंसित ताजा इंस्टॉल के अलावा, मैंने इन दोनों को किया है ...


क्या मुझे समर्थन की आवश्यकता है?

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

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


इन-प्लेस अपग्रेड क्यों नहीं?

रेड हैट ने इसके बारे में क्या कहा है :

Red Hat Red Hat Enterprise Linux के किसी भी मुख्य संस्करण के बीच में जगह के उन्नयन का समर्थन नहीं करता है। एक प्रमुख संस्करण को संपूर्ण संख्या संस्करण परिवर्तन द्वारा निरूपित किया जाता है। उदाहरण के लिए, Red Hat Enterprise Linux 5 और Red Hat Enterprise Linux 6 Red Hat Enterprise Linux के दोनों प्रमुख संस्करण हैं।

प्रमुख रिलीज़ में इन-प्लेस अपग्रेड सभी सिस्टम सेटिंग्स, सेवाओं या कस्टम कॉन्फ़िगरेशन को संरक्षित नहीं करते हैं। नतीजतन, रेड हैट एक प्रमुख संस्करण से दूसरे में अपग्रेड करते समय नए इंस्टॉलेशन की जोरदार सिफारिश करता है।

उन्होंने आगे चेतावनी दी:

हालाँकि, अपने सिस्टम को अपग्रेड करने के लिए चुनने से पहले निम्नलिखित सीमाओं पर ध्यान दें:

  • विभिन्न कॉन्फ़िगरेशन फ़ाइल स्वरूपों या लेआउट में बदलाव के कारण अपग्रेड करने के बाद व्यक्तिगत पैकेज कॉन्फ़िगरेशन फ़ाइलें काम कर सकती हैं या नहीं भी।
  • यदि आपके पास Red Hat के स्तरित उत्पाद (जैसे कि क्लस्टर सूट) स्थापित है, तो Red Hat Enterprise Linux नवीनीकरण पूर्ण होने के बाद इसे मैन्युअल रूप से अपग्रेड करने की आवश्यकता हो सकती है।
  • अपग्रेड के बाद थर्ड पार्टी या ISV एप्लिकेशन सही तरीके से काम नहीं कर सकते हैं।

बेशक, वे तब विधि 1 के माध्यम से इन-प्लेस अपग्रेड करने का तरीका बताते हैं, बस अगर आप वास्तव में इसे करना चाहते हैं। यह सुविधा मौजूद है और Red Hat इसमें विकास समय डालता है, इसलिए यह समर्थित है कि यह सुविधा मौजूद है। लेकिन अगर कुछ गलत होता है, तो Red Hat आपको ताज़ा स्थापित करने के लिए कहेगा; वे अपग्रेड के परिणामस्वरूप टूटने वाली चीजों के लिए विक्रेता का समर्थन प्रदान नहीं करेंगे।

रिकॉर्ड के लिए, मुझे वास्तव में RHEL / CentOS या फेडोरा प्रणाली के इन-प्लेस अपग्रेड में कोई समस्या नहीं है जिसे मैं खुद नहीं सुलझा सकता। विशिष्ट समस्याएँ नामांकित पैकेज, तृतीय पक्ष रिपॉजिटरी और पैकेज के i386 और x86_64 आर्किटेक्चर के बीच सामयिक संस्करण के बेमेल से आती हैं। yumमुझे लगता है कि इन से निपटने में इंस्टॉलर थोड़ा बेहतर है।


मुझे कैसे अपग्रेड करना चाहिए?

मैं आम तौर पर लोगों को चेतावनी देता हूं कि उन्हें एक प्रमुख संस्करण से आरएचईएल सिस्टम को अपडेट करने के लिए हर 3-4 साल में एक रखरखाव विंडो पर योजना बनानी चाहिए । जबकि उन्नयन आम तौर पर आसानी से चलते हैं, अप्रत्याशित हमेशा हो सकता है।

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

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

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


स्विचिंग वितरण मदद करेगा?

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

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


भविष्य में क्या है?

फेडोरा प्रोजेक्ट इन-प्लेस अपग्रेड को बेहतर बनाने के लिए एक टूल पर काम कर रहा है। उनके पास एक टूल preupgradeथा जिसे छोड़ दिया गया था और फेडोरा 18 के साथ फेडअप शुरुआत नामक एक नए टूल के साथ बदल दिया गया था । इसे आरएचईएल 7 में जोड़ा गया था और अब इन-प्लेस अपग्रेड का पूरा समर्थन है , कम से कम आरएचईएल 6 से आरएचईएल 7 तक । अपने स्वयं के अनुभव से मैं कह सकता हूं कि fedupअभी भी कुछ किंक है , यह एक बहुत ही उपयोगी उपकरण है।

CentOS एक रोलिंग-रिलीज़ प्रकार के भंडार के साथ भी प्रयोग कर रहा है , लेकिन यह केवल मामूली संस्करणों (जैसे 6.3-6.4) के बीच लागू होता है।


1
नए फेडोरा अपग्रेड टूल को फेडअप कहा जाता है । तीन से चार साल मुझे बड़े उन्नयन के लिए आक्रामक लगते हैं, मुझे लगता है कि मुझे 10+ वर्ष के जीवन चक्र की ओर अंतिम बार देखना होगा, इसलिए मैं और अधिक नियमित रूप से छोटे उन्नयन को प्रोत्साहित करूंगा।
डोमिनिक क्लीवल

3
उन लोगों के लिए जिन्हें निरंतर आधार पर नई सुविधाओं की आवश्यकता है, 3-4 साल लगभग बहुत लंबा है।
माइकल हैम्पटन

3
PHP, Apache, कर्नेल रिविजन और GLIBC जैसी सरल चीजें ... लोग उन परिवर्तनों को अधिक बार चाहते हैं।
ewwhite

2
डेबियन / उबंटू की अपग्रेड प्रक्रिया सही नहीं है, लेकिन यह तथ्य कि यह पसंदीदा अपग्रेड मैकेनिज्म है और रेड हैट का कोई आधिकारिक रूप से समर्थित अपग्रेड मैकेनिज्म नहीं है, मेरे लिए वॉल्यूम बोलता है।
गियर पर पॉल गियर

1
यह इन-प्लेस अपग्रेड के रूप में मौजूद नहीं है, जैसा कि वे स्पष्ट रूप से करते हैं, लेकिन क्या संबंधित विक्रेता उनके लिए समर्थन प्रदान करते हैं।
माइकल हैम्पटन

6

मेरे अपने अंतिम पैराग्राफ पर ले:

मुझे लगता है कि वहाँ विन्यास प्रबंधन कोण है, लेकिन अधिकांश कठपुतली स्थापना मैं देख रहा हूँ कि अत्यधिक अनुकूलित अनुप्रयोग सर्वर के साथ वातावरण में अनुवाद नहीं होता है (पर्यावरण बी में एक एकल सर्वर हो सकता है जिसका ifconfig आउटपुट इस तरह दिखता है)। हालांकि, एचआरईएल प्रमुख संस्करण टक्कर से संगठनों को प्राप्त करने में मदद करने के लिए कॉन्फ़िगरेशन प्रबंधन का उपयोग कैसे किया जा सकता है, इस पर सुझाव सुनने में मुझे दिलचस्प लगेगा।

मुझे लगता है कि कॉन्फ़िगरेशन प्रबंधन प्रणालियों का वास्तविक मूल्य, विशेष रूप से पर्यावरण बी के संदर्भ में, यह है कि वे सर्वर को स्वतंत्र रूप से चलाने वाले सेवा का निर्माण करने के लिए उपकरण प्रदान करते हैं। यदि मौजूदा सेवाओं को बनाने के लिए CMS का उपयोग नहीं किया गया था, तो शायद यह सेवाओं को फिर से बनाने में बहुत मदद नहीं करेगा।

मुझे पता है कि यह आपकी तात्कालिक समस्या को हल नहीं करता है, लेकिन मेरे लिए यह सेवाओं के बजाय सर्वर के संदर्भ में संगठन के विचार से उपजा है। सेवा-केंद्रित सोच में, व्यक्तिगत सर्वरों के व्यक्तित्व को तब तक बनाए रखने की आवश्यकता नहीं है जब तक सेवा कार्य करना जारी रखती है। यदि पूरी सेवा के निर्माण के लिए अनुशासित तरीके से CMS का उपयोग किया जाता है, तो उस सेवा को किसी अन्य सिस्टम में ले जाना अपेक्षाकृत सरल होना चाहिए, क्योंकि मशीन के सभी व्यक्तित्व CMS द्वारा बनाए जाएंगे।

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


1
आप सामान्य अर्थों में सेवाओं बनाम सर्वर के बारे में सही हैं। पर्यावरण बी में कुछ विशेष सर्वर हार्डवेयर (10 जीबी एनआईसी, ऑफलोड लाइब्रेरी) हैं जो अपस्ट्रीम प्रदाताओं के साथ इंटरफेस करते हैं। यह ऐसा कुछ है जिसे डाउन-लोड किए बिना आसानी से लोड-संतुलित या स्थानांतरित नहीं किया जा सकता है। एक गैर-वित्त उदाहरण कुछ शामिल उत्पादन मशीनरी के लिए नियंत्रक के रूप में संलग्न सर्वर की तरह होगा। विशेष मामला, शायद समर्पित PCIe इंटरफ़ेस कार्ड के साथ। सर्वर के लिए एक बहुत ही एक सेटअप अद्वितीय। कठपुतली में, क्या आप कहेंगे, "यहाँ इस एक होस्ट / भूमिका के लिए विन्यास है" और इसके साथ रहते हैं?
22

1
सहमत, कुछ चीजें सामान्य मामलों में फिट होने के लिए आसान नहीं हैं, खासकर यदि आपके पास विशिष्ट हार्डवेयर आवश्यकताओं वाला वातावरण है। कठपुतली के साथ, जितना संभव हो उतना भूमिका में धकेलने से अच्छी समझ आती है। लेकिन अंत में इसे काम करना पड़ता है, इसलिए अगर कुछ बहुत सुंदर नहीं है, तो यह काम करता है, तो मैं इसके साथ रहने में असमर्थ हूं। ज्यादातर समय, हमें चीजों को असंगत होने के साथ जीना पड़ता है क्योंकि हमारे पास उन्हें "सही" बनाने का समय नहीं है।
पॉल गियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.