AUR पैकेज की समीक्षा कैसे करें

[keyword]


शुक्रवार, 18 जुलाई, 2025 को, आर्क लिनक्स टीम को सूचित किया गया कि तीन मैं और ऐसे पैकेज अपलोड किए गए हैं जिनमें मैलवेयर है। मेरे सहित कुछ अनुरक्षकों ने इन पैकेजों को हटाने, दुर्भावनापूर्ण कोड के सभी निशान हटाने और भविष्य में दुर्भावनापूर्ण अपलोड से बचाने का ध्यान रखा।

मेरे सह-साक्षात्कारकर्ता क्वेंटिन माइकॉड अच्छा किया है मैलवेयर कैसे काम करता है इसके बारे में लिखेंइसलिए मैं इसमें ज्यादा नहीं जाऊंगा। यदि आप इसके बारे में अधिक जानना चाहते हैं, तो उनका ब्लॉग पढ़ें। इसके बजाय, मैं इस पर एक क्रैश कोर्स करना चाहूँगा कि ये पैकेजिंग स्क्रिप्ट कैसे काम करती हैं, और आप स्वयं उनकी समीक्षा कैसे करेंगे।

क्या है मैं और?

आर्क यूजर रिपॉजिटरी पैकेजिंग स्क्रिप्ट का एक संग्रह है, PKGBUILD उपयोगकर्ताओं द्वारा बनाई गई फ़ाइलें। जो कोई भी इस पर अकाउंट बनाता है aur.archlinux.orgआर्क लिनक्स पैकेजिंग स्क्रिप्ट अपलोड कर सकते हैं, बशर्ते कि उसी नाम के लिए कोई स्क्रिप्ट पहले से मौजूद न हो। अवश्य है
कुछ नियम आप जो सबमिट कर सकते हैं उसके बारे में (उदाहरण के लिए अन्य अधिकारियों की नकल न करें या)।
मैं और पैकेज), लेकिन आम तौर पर कुछ भी हो जाता है।

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

से स्थापित करें मैं और पैकेजिंग स्क्रिप्ट मुख्य पैकेजिंग रेपो से इंस्टॉल करने जितना आसान नहीं है। आप दौड़ सकते हैं makepkg एक पर PKGBUILD और परिणामी पैकेज को स्थापित करें, लेकिन यह उससे भी कठिन हो जाता है PKGBUILDयह अक्सर केवल में पाए जाने वाले अन्य पैकेजों पर निर्भर होता है मैं और. इसे आसान बनाने के लिए लोग अक्सर इसका इस्तेमाल करते हैं मैं और-सहायक, जो एक प्रदान करते हैं pacman-उन्हें चलाने जैसा अनुभव। हालाँकि, यह कुछ कमियों के साथ आता है।

जो कोई भी ऐसा करना चाहता है वह इन्हें अपलोड कर सकता है PKGBUILD तक मैं और. प्रवेश की बाधा को कम करना बहुत अच्छा है, और इसी तरह मैंने आर्क लिनक्स में योगदान देना शुरू किया। दुर्भाग्य से, हर किसी के इरादे अच्छे नहीं होते हैं और ऐसा हुआ है कि लोग मैलवेयर अपलोड कर देते हैं। इस वजह से, यह महत्वपूर्ण है कि आप पशुचिकित्सक को दिखाएँ PKGBUILDवह यह है कि आप इंस्टॉल करें.

क्या करना है PKGBUILDदेखो?

जैसा कि पहले उल्लेख किया गया है, मैं और इसमें पैकेज नहीं हैं, बल्कि पैकेज बनाने के लिए बिल्ड स्क्रिप्ट शामिल हैं। आर्चलिनक्स PKGBUILDs बस बैश स्क्रिप्ट हैं जो एक निश्चित पैटर्न का पालन करती हैं। उदाहरण के लिए, निम्नलिखित उदाहरण लें:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Maintainer: John Doe 
pkgname=example
pkgver=1.0
pkgrel=1
pkgdesc="An example package"
arch=(x86_64)
url="https://example.org/"
license=('WTFPL')
install="example.install"
source=("https://example.org/$pkgname-$pkgver.tar.gz"
        "$pkgname-$pkgver.patch::https://git.example.org/example/pull/42.patch")
sha256sums=("de4bba005e86b4fbf0399e2cb492b1e941099b951a45137212507c2cbc8fae63"
            "b6dc933311bc2357cc5fc636a4dbe41a01b7a33b583d043a7f870f3440697e27")

prepare() {
    cd "$pkgname-$pkgver"
    patch -p1 -i "$srcdir/$pkgname-$pkgver.patch"
}

build() {
    cd "$pkgname-$pkgver"
    ./configure --prefix=/usr
    make
}

check() {
    cd "$pkgname-$pkgver"
    make -k check
}

package() {
    cd "$pkgname-$pkgver"
    make DESTDIR="$pkgdir/" install
}

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

मेटाडाटा

pkgname
आप उस पैकेज को परिभाषित करें जिसे हम वर्तमान में बना रहे हैं।
pkgver
इसका मतलब है कि सॉफ़्टवेयर का कौन सा अपस्ट्रीम रिलीज़ बनाया जा रहा है। यह संख्या हमेशा बढ़ती रहनी चाहिए, जैसे pacman इस नंबर का उपयोग यह निर्धारित करने के लिए किया जाएगा कि अपडेट की आवश्यकता है या नहीं।
pkgrel
पैकेज रिलीज़ नंबर है. हर बार अपडेट होने पर यह रिलीज़ संख्या बढ़ जाती है PKGBUILD बिना अद्यतन किये pkgverजैसे कि जब पैकेजिंग विकल्प बदलते हैं। यह पुनर्स्थापित करता है 1 हर बार एक नया अपस्ट्रीम रिलीज़ किया जाता है।
pkgdesc
पैकेज का एक संक्षिप्त, मानव-पठनीय विवरण है। इसे पैकेज सूचियों में दिखाया जाता है और खोज के लिए उपयोग किया जाता है, लेकिन अन्यथा निर्मित सॉफ़्टवेयर को प्रभावित नहीं करता है।
arch
मान्य सीपीयू आर्किटेक्चर की एक सूची है जिसके लिए यह पैकेज बनाया जा सकता है। यह विशेष सरणी भी हो सकती है ('any')जो (केवल) यह नहीं दर्शाता है कि यह पैकेज किसी भी आर्किटेक्चर के लिए बनाया जा सकता है, बल्कि परिणामी पैकेज में कोई आर्किटेक्चर-विशिष्ट कोड नहीं है। यह पायथन जैसी भाषाओं में लिखे गए पैकेजों के लिए आम है।
url
यह केवल एक लिंक है जिस पर पैकेज उपयोगकर्ता अधिक जानकारी के लिए जा सकता है और अन्यथा यह पैकेज को प्रभावित नहीं करता है।
license
वह लाइसेंस है जिसके तहत यह पैकेज वितरित किया जाता है। यह परियोजना के लिए सभी लागू लाइसेंसों की एक सूची हुआ करती थी, लेकिन चूंकि इसका अर्थ थोड़ा अस्पष्ट है, आजकल लाइसेंस सरणी में एक आइटम होना चाहिए जो एक है एसपीडीएक्स लाइसेंस अभिव्यक्ति.
install
आमतौर पर a में मौजूद नहीं होता है PKGBUILD. यदि मौजूद है, तो यह विशिष्ट बैश फ़ंक्शंस के साथ एक स्क्रिप्ट (पैकेज फ़ाइल के बगल में शामिल) के नाम को संदर्भित करता है जिसे पैकेज स्थापित, अपग्रेड या हटाए जाने पर निष्पादित किया जाएगा। यह से है pacmanऔर इसलिए जड़ के रूप में.
source
सूत्रों की एक श्रृंखला है. ये या तो डाउनलोड करने योग्य यूआरएल, जीआईटी जैसे संस्करण नियंत्रण यूआरएल या सरल फ़ाइल नाम हो सकते हैं, जिसका अर्थ है पैकेज फ़ाइलों के एक हिस्से में संबंधित फ़ाइल।
sha256sums
स्रोतों के समान लंबाई की एक और सरणी है, जो अपेक्षित को निर्दिष्ट करती है SHA-256 पैकेज स्रोतों के लिए चेकसम। अन्य हैशिंग एल्गोरिदम उपलब्ध हैं crc32sums पर b2sums. डाइजेस्ट के एकाधिक सेट निर्दिष्ट किए जा सकते हैं, लेकिन कम से कम एक होना चाहिए। जादुई मूल्य SKIP इसका उपयोग कुछ फ़ाइलों के लिए सत्यापन चेकसम को छोड़ने के लिए किया जा सकता है, उदाहरण के लिए बाहरी चेकसम, या पीजीपी हस्ताक्षर के लिए।

उस सभी मेटाडेटा के बाद, हम वास्तविक कोड पर पहुंचते हैं जो कुछ करता है: पैकेजिंग फ़ंक्शन।

कार्यों का निर्माण करें

बिल्डिंग पैकेज 4 चरणों में किया जाता है, प्रत्येक का अपना बैश फ़ंक्शन होता है। इसकी शुरुआत होती है
prepare(). इस फ़ंक्शन से स्रोत कोड में सभी आवश्यक परिवर्तन करने की अपेक्षा की जाती है, जैसे पैच फ़ाइलें लागू करना या कुछ पंक्तियों को संपादित करना sed. कुछ पारिस्थितिक तंत्रों, जैसे Node.js और Rust में, यह निर्भरताएँ भी डाउनलोड करता है। आदर्श रूप से, अनुसरण किए जाने वाले सभी चरण prepare() अब नेटवर्क एक्सेस की आवश्यकता नहीं है.

फिर हम आते हैं build()जो, जैसा कि नाम से पता चलता है, पैकेज बनाता है। यह कॉन्फ़िगरेशन स्क्रिप्ट, कंपाइलर और जो कुछ भी प्रासंगिक बायनेरिज़ उत्पन्न करता है उसे कॉल करने का स्थान है। यह आम तौर पर वह हिस्सा है जिसमें समय लगता है।

पैकेजिंग के बाद आमतौर पर एक होता है check() कदम। यहां हम यह जांचना चाहते हैं कि आर्क लिनक्स पैकेजिंग के अंदर पैकेज इच्छित कार्य करता है या नहीं। यहां क्या करना है यह अलग-अलग है, लेकिन अधिकांश PKGBUILDपैकेज के यूनिट परीक्षण चलाने का प्रयास करता है। आर्क लिनक्स में आम तौर पर उन पुस्तकालयों के संस्करण नहीं होते हैं जिनके खिलाफ अपस्ट्रीम परियोजनाओं का परीक्षण किया गया है, और ऐसे परीक्षण एक उचित धुआं परीक्षण प्रदान करते हैं कि चीजें अप्रत्याशित तरीकों से नहीं टूटी हैं।

अंततः package() फ़ंक्शन कहा जाता है. यह एकमात्र कार्य है जो तकनीकी रूप से आवश्यक है, अन्य सभी को छोड़ा जा सकता है। इस फ़ंक्शन को जेनरेट की गई फ़ाइलों की आवश्यकता होती है build() चरण, कुछ के सापेक्ष अपनी अंतिम स्थिति में $pkgdir. कई पारिस्थितिक तंत्र प्रदान करते हैं (इसके समतुल्य)
make install इसके लिए, जो जीवन को आसान बनाता है, लेकिन अक्सर आपको इसे केवल स्पष्ट करना होगा।

किस बात का ध्यान रखें

अब चूँकि हम a के विभिन्न भागों को जानते हैं PKGBUILD मतलब, हम इसकी सामग्री को संशोधित करने के बारे में बात कर सकते हैं। मैं उन कुछ वस्तुओं पर चर्चा करना चाहता हूं जो मुझे सबसे महत्वपूर्ण लगती हैं, लेकिन यह किसी भी तरह से एक विस्तृत सूची नहीं है। तथ्य यह है कि मैं यह लिख रहा हूं, यह संभवतः लोगों द्वारा उपयोग की जाने वाली रणनीतियों को किसी तरह से प्रभावित करेगा। हालाँकि, आइए मुक्का मारें…

जाओ sources बस्ती

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

आर्क लिनक्स प्रोजेक्ट है RFC बताता है कि किन संसाधनों का उपयोग किया जाना चाहिएपैकेजिंग के लिए सबसे विश्वसनीय स्रोत होना। हालाँकि ऐसी कठोरता आवश्यक नहीं है या, कुछ मामलों में, वांछनीय भी है मैं औरआप इसे प्रेरणा के रूप में उपयोग कर सकते हैं।

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

देखें कि क्या निर्माण चरण समझ में आते हैं

prepare(), build(), check()और package() फ़ंक्शंस स्वाभाविक रूप से कोड होते हैं जिन्हें पैकेज बनाते समय आपकी मशीन पर निष्पादित किया जाएगा, यदि कोई हो

  • में कोई डाउनलोड नहीं होना चाहिए build(), check()या package()और आदर्श रूप से नहीं
    prepare()हालाँकि कई पारिस्थितिक तंत्रों (गो, नोड.जेएस, रस्ट आदि कुछ) को इसकी आवश्यकता होती है।

  • स्क्रिप्ट द्वारा निष्पादित कमांड स्पष्ट पैकेजिंग कमांड होने चाहिए, और कोई भी कस्टम स्क्रिप्ट अपस्ट्रीम रेपो से आनी चाहिए। अक्सर पैकेजिंग स्क्रिप्ट अपस्ट्रीम “कैसे स्थापित करें” से मेल खाती है, लेकिन अक्सर नहीं, क्योंकि पैकेज अनुरक्षक आमतौर पर रैपर स्क्रिप्ट को कॉल करने के बजाय सीधे बिल्ड टूल को कॉल करते हैं।

  • बिल्ड स्क्रिप्ट नहीं चलनी चाहिए sudo या ऐसा ही कुछ. अगर फिर भी ऐसा होता है तो यह गलत है। अधिक से अधिक यह एक पैकेजिंग त्रुटि है, जैसे sudo बिल्ड क्रोट जैसे गैर-संवादात्मक वातावरण में काम करने की अपेक्षा नहीं की जानी चाहिए। कभी-कभी कोई पैकेजर गलती से पैकेज फ़ाइलों को पैकेज में जोड़ने के बजाय उन्हें उनके स्थान पर ले जाने का प्रयास करता है।

इंस्टॉल स्क्रिप्ट की जांच करें

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

ठीक वैसे ही, नया स्थापित किया गया है pacman हुकों को भी भौंहें ऊपर उठानी चाहिए। पॅकमैन हुक स्थापित करें
/usr/share/libalpm/hooks (और कभी-कभी भी /etc/pacman.d/hooks भले ही यह गलत है) और इसके ट्रिगर हिट होने पर एक कमांड निष्पादित कर सकता है। मुख्य आर्क रिपोज़ में शामिल लोग सौम्य हैं और वास्तव में इसकी आवश्यकता को कम करते हैं install स्क्रिप्ट, आवश्यकतानुसार फ़ॉन्ट और आइकन कैश को स्वचालित रूप से पुनः बनाकर, और initramfsऔर भी कई। एक मनमाना PKGBUILD उनमें से किसी एक को जोड़ना असामान्य है, और आपको इस बात पर ध्यान देना होगा कि वह हुक क्या करने का प्रयास कर रहा है।

यदि आप इसे नहीं समझते हैं तो इसका उपयोग न करें

जबकि हम इसे साफ रखने की कोशिश करते हैं मैं और यह किसी भी व्यक्ति के लिए स्वतंत्र रूप से उपलब्ध है जो कैप्चा से आगे निकलने का तरीका जानता है, और कोई भी इस पर कोड अपलोड कर सकता है। यहां तक ​​कि लोकप्रिय, अच्छे इरादे वाले कोड में भी कभी-कभी बग हो सकते हैं आपके सिस्टम को नुकसान पहुंचाएं. मैं और स्वयंसेवकों द्वारा सर्वोत्तम समय पर रखरखाव किया जाता है, जिनमें से कई वर्तमान में पहली बार पैकिंग करते समय अपने पैर गीले कर रहे हैं। गलतियाँ हो सकती हैं और होंगी, और यह ठीक है।

जब कोई बात दुर्भावनापूर्ण हो सकती है

अब जब हमें इस बात का अंदाज़ा हो गया है कि क्या दुर्भावनापूर्ण हो सकता है, तो हम निर्णय ले सकते हैं कि इसके साथ क्या करना है। सबसे आसान तरीका है बस पूछ लेना. मेरी राय में, इसके लिए सबसे अच्छी जगह है #archlinux-aur आईआरसी चैनल पर जाने दोजो कि आधिकारिक स्थान है मैं और बहस।
मंच पूछने के लिए भी एक अच्छी जगह है. यदि अन्य सभी विफल हो जाते हैं, तो यह भी है मेलिंग सूची.

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

यह बहुत सरल लगता है

और यह है. मैं और इसे एक अलग तरह के इंटरनेट के लिए बनाया गया था। अधिक सहयोगी, कम शत्रुतापूर्ण। यह इस विश्वास पर आधारित है कि उपयोगकर्ता आम तौर पर समझदार चीजें करेंगे। मैं और पुराना सॉफ्टवेयर है. इसकी शुरुआत “सिर्फ कुछ एफ़टीपी सर्वर” के रूप में हुई जहां लोग फ़ाइलें अपलोड कर सकते थे। ऐसी प्रणाली 2026 में डिज़ाइन नहीं की जाएगी।

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

फिलहाल मेरा मानना ​​है कि इसका कोई अंत नहीं दिख रहा है मैं और. हम कुछ समय तक इसे ऐसे ही जारी रख सकते हैं। लेकिन अगर लोग चीज़ों को बेहतर बनाने के लिए कार्य करें, तो हम और भी बहुत कुछ कर सकते हैं।


स्वीकृतियाँ

कवर छवि साइबर सुरक्षा पाम प्रिंट द्वारा पीट लिनफोर्थ

की संरचना पर अधिक जानकारी PKGBUILD फ़ाइलें उसमें पाई जा सकती हैं मैन पेज.

हालाँकि मैं आर्क लिनक्स पैकेज मेंटेनर टीम का सदस्य हूँ, यह पोस्ट और इसमें दी गई सभी सलाह मेरी राय हैं और (आवश्यक रूप से) समग्र रूप से आर्क लिनक्स को प्रतिबिंबित नहीं करती हैं।



Eva Grace

Eva Grace

Leave a Reply

Your email address will not be published. Required fields are marked *