
VEX रिपॉजिटरी विनिर्देशन
इस दस्तावेज़ में कीवर्ड "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", और "OPTIONAL" की व्याख्या RFC 2119 में वर्णित अनुसार की जानी है।
संस्करणों की तुलना करते समय:
उदाहरण तुलनाएँ:
मैनिफेस्ट फ़ाइल VEX डेटा रिपॉजिटरी के बारे में मेटाडेटा प्रदान करती है। इस फ़ाइल में VEX डेटा प्राप्त करने और अद्यतन करने के लिए आवश्यक जानकारी होनी चाहिए (MUST)।
https://<domain>/.well-known/vex-repository.json पर स्थित होना आवश्यक (MUST) है।vex-repository.json को मुख्य शाखा की रूट निर्देशिका में रखा जाना आवश्यक (MUST) है।मैनिफेस्ट फ़ाइल के लिए JSON स्कीमा यहाँ परिभाषित है।
{
"name": "Example Org VEX Repository",
"description": "VEX repository for Example Organization",
"versions": [
{
"spec_version": "0.1",
"locations": [
{
"url": "https://example.com/vex-hub/v0/vex-data-v0.tar.gz"
}
],
"update_interval": "24h",
"repository_specific": {
"location": {
"repository_type": "db",
"db_type": "bbolt",
"url": "oci://ghcr.io/example.com/vex-db:0"
}
}
},
{
"spec_version": "1.0",
"locations": [
{
"url": "https://example.com/vex-hub/v1/vex-data-v1.tar.gz//subdirectory"
},
{
"url": "https://example.com/vex-api/v1"
}
],
"update_interval": "1h"
}
]
}
| फ़ील्ड | आवश्यक | विवरण और उपयोग नोट्स |
|---|---|---|
| name | ✓ | रिपॉजिटरी का नाम। |
| description | ✓ | रिपॉजिटरी का संक्षिप्त विवरण। |
| versions | ✓ | उपलब्ध संस्करणों के विवरण वाली एक सरणी। सरणी का प्रत्येक ऑब्जेक्ट एक संस्करण का प्रतिनिधित्व करता है जो VEX रिपॉजिटरी विनिर्देश के एक संस्करण को लागू करता है। संस्करणों को आरोही क्रम में, सबसे पुराने से नवीनतम तक क्रमबद्ध होना आवश्यक (MUST) है। उप-फ़ील्ड के लिए अलग तालिका देखें। |
| फ़ील्ड | आवश्यक | विवरण और उपयोग नोट्स |
|---|---|---|
| spec_version | ✓ | लागू किए गए VEX रिपॉजिटरी विनिर्देश का संस्करण (जैसे, "0.1")। प्रारूप "X.Y" होना आवश्यक (MUST) है, जैसा कि अनुभाग 1 में परिभाषित है। |
| locations | ✓ | VEX डेटा लोकेशन का वर्णन करने वाले ऑब्जेक्ट्स की एक सरणी। इसमें कम से कम एक लोकेशन ऑब्जेक्ट होना आवश्यक (MUST) है। उप-फ़ील्ड के लिए अलग तालिका देखें। |
| update_interval | ✓ | इस संस्करण के VEX डेटा के लिए अनुशंसित अद्यतन जाँच अंतराल। Go अवधि प्रारूप का उपयोग करता है (जैसे, "1h", "30m", "24h")। |
| repository_specific | - | अतिरिक्त रिपॉजिटरी-विशिष्ट जानकारी। |
रिपॉजिटरी में निम्नलिखित संरचना होना आवश्यक (MUST) है:
vex-repository.<archive_extension>
[optional_subdirectory/]
├── index.json
└── pkg/
├── <type>/
│ ├── <namespace>/
│ │ ├── <name>/
│ │ │ └── vex.json
│ │ └── ...
│ └── ...
└── ...
जहाँ <archive_extension> समर्थित संग्रह प्रारूपों में से एक है।
[optional_subdirectory/] तब शामिल किया जाता है जब locations फ़ील्ड में URL // के बाद उपनिर्देशिका पथ के साथ समाप्त होता है।
यह रिपॉजिटरी संरचना में लचीलापन प्रदान करता है, विशेष रूप से GitHub रिपॉजिटरी जैसी मौजूदा रिपॉजिटरी लेआउट का उपयोग करते समय।
उदाहरण के लिए, यदि URL https://github.com/org/repo/archive/refs/heads/main.tar.gz//repo-main है, तो फ़ाइल संरचना इस प्रकार होगी:
main.tar.gz
└──repo-main/
├── index.json
└── pkg/
└── ...
इस स्थिति में, repo-main/ tar.gz फ़ाइल के भीतर VEX रिपॉजिटरी के लिए रूट निर्देशिका है।
index.json फ़ाइल संग्रह फ़ाइल की सामग्री के लिए एक मैनिफेस्ट के रूप में कार्य करती है। इसे संग्रह की रूट निर्देशिका में या URL में परिभाषित होने पर निर्दिष्ट उपनिर्देशिका में रखा जाना आवश्यक (MUST) है। फ़ाइल में निम्नलिखित संरचना होना आवश्यक (MUST) है:
{
"updated_at": "2023-07-04T12:00:00Z",
"packages": [
{
"id": "pkg:deb/debian/curl",
"location": "pkg/deb/debian/curl/vex.json"
},
{
"id": "pkg:npm/lodash",
"location": "pkg/npm/lodash/vex.json",
"format": "csaf"
}
]
}
फ़ील्ड विवरण:
| फ़ील्ड | आवश्यक | विवरण |
|---|---|---|
| updated_at | ✓ | वह टाइमस्टैम्प जो दर्शाता है कि यह index.json अंतिम बार कब अद्यतन किया गया था। |
| packages | ✓ | ऑब्जेक्ट्स की सरणी, जिसका प्रत्येक ऑब्जेक्ट रिपॉजिटरी में एक पैकेज का प्रतिनिधित्व करता है। |
| packages[].id | ✓ | पैकेज का पहचानकर्ता। वर्तमान में, केवल Package URL (PURL) स्वीकार किया जाता है। संस्करण, क्वालिफायर और सबपाथ को हटाना आवश्यक (MUST) है क्योंकि वे VEX दस्तावेज़ में शामिल होते हैं। OCI प्रकार के पैकेजों के लिए, repository_url क्वालिफायर को id में शामिल किया जाना आवश्यक (MUST) है। |
| packages[].location | ✓ | संग्रह के भीतर इस पैकेज के VEX फ़ाइल का सापेक्ष पथ। क्लाइंट को विशिष्ट पैकेज VEX फ़ाइलों का पता लगाने के लिए इस फ़ील्ड का उपयोग करना आवश्यक (MUST) है। |
| packages[].format | - | VEX डेटा का प्रारूप। या तो "openvex" या "csaf"। यदि छोड़ा गया है, तो "openvex" मान लिया जाता है। |
इंडेक्स फ़ाइल के लिए स्कीमा यहाँ परिभाषित है।
प्रत्येक पैकेज की VEX जानकारी index.json फ़ाइल में परिभाषित पथ संरचना का पालन करते हुए एक अलग JSON फ़ाइल में संग्रहीत होना आवश्यक (MUST) है। इन फ़ाइलों की सामग्री format फ़ील्ड में निर्दिष्ट VEX प्रारूप विनिर्देश (OpenVEX या CSAF VEX) का पालन करना आवश्यक (MUST) है।
एक एकल VEX दस्तावेज़ में एक ही पैकेज के विभिन्न संस्करणों, क्वालिफायरों और सबपाथों के लिए जानकारी शामिल हो सकती है (MAY)।
OpenVEX दस्तावेज़ उदाहरणों के लिए, कृपया OpenVEX विनिर्देश देखें।
repository_url क्वालिफायर का उपयोग किया जा सकता है (MAY)। उदाहरण के लिए, PURL "pkg:oci/debian@sha256:3e45770a143ee5afd1ebde5a6aea6e32a71d2bt5602f5dac8025db0d9cc19f10?repository_url=docker.io/library/debian" वाला पैकेज "pkg/oci/docker.io/library/debian/vex.json" में संग्रहीत किया जा सकता है।location फ़ील्ड में स्वतंत्र रूप से परिभाषित किया जा सकता है (MAY)।VEX रिपॉजिटरी को अद्यतन करते समय:
updated_at टाइमस्टैम्प को अद्यतन करना शामिल है।locations URL को अद्यतन करें।VEX रिपॉजिटरी को VEX डेटा और संबंधित मेटाडेटा वाली एक संग्रह फ़ाइल के रूप में वितरित किया जाना आवश्यक (MUST) है। इस संग्रह का संदर्भ vex-repository.json फ़ाइल में locations फ़ील्ड द्वारा दिया जाना आवश्यक (MUST) है, और यह VEX जानकारी वितरित करने का प्राथमिक माध्यम है।
संग्रह फ़ाइल निम्नलिखित प्रारूपों में से एक में होना आवश्यक (MUST) है:
tar.gz और tgztar.bz2 और tbz2tar.xz और txzzipgzbz2xzversions सरणी से संस्करण चुनते समय:
spec_version फ़ील्ड के आधार पर एक ऐसा संस्करण चुनना आवश्यक (MUST) है जिसे वे समर्थन करते हैं।locations सरणी में कई लोकेशनों से निपटते समय:
क्लाइंटों को एकाधिक VEX रिपॉजिटरी का समर्थन करने के लिए डिज़ाइन किया जाना चाहिए (SHOULD)।
क्लाइंटों को अद्यतनों की जाँच के लिए निम्नलिखित प्रक्रिया का उपयोग करना चाहिए (SHOULD):
update_interval प्राप्त करें।update_interval जोड़कर अगले अद्यतन समय की गणना करें।कुशल संचालन के लिए, क्लाइंट निम्नलिखित रणनीतियों को लागू कर सकते हैं (MAY):
update_interval बहुत छोटा है।