इस उत्तर का उद्देश्य यह दिखाना है कि कैसेथुथ क्रिया के साथ कैशिंग किया जा सकता है। कैश कैसे करना है valgrind
, यह दिखाने के लिए जरूरी नहीं है , बल्कि यह दिखाने के लिए भी कि सब कुछ कैश नहीं किया जाना चाहिए, या कैशिंग और कैश को पुनर्स्थापित करने या निर्भरता को पुनर्स्थापित करने के ट्रेडऑफ को ध्यान में रखना होगा।
आप ऐसा करने के लिए actions/cache
क्रिया का उपयोग करेंगे ।
इसे एक चरण के रूप में जोड़ें (इससे पहले कि आपको वेलग्रिंड का उपयोग करने की आवश्यकता हो):
- name: Cache valgrind
uses: actions/cache@v1.0.3
id: cache-valgrind
with:
path: "~/valgrind"
key: ${{secrets.VALGRIND_VERSION}}
अगला चरण कैश्ड संस्करण को स्थापित करने का प्रयास करना चाहिए यदि कोई हो या रिपॉजिटरी से स्थापित हो:
- name: Install valgrind
env:
CACHE_HIT: ${{steps.cache-valgrind.outputs.cache-hit}}
VALGRIND_VERSION: ${{secrets.VALGRIND_VERSION}}
run: |
if [[ "$CACHE_HIT" == 'true' ]]; then
sudo cp --verbose --force --recursive ~/valgrind/* /
else
sudo apt-get install --yes valgrind="$VALGRIND_VERSION"
mkdir -p ~/valgrind
sudo dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
fi
व्याख्या
VALGRIND_VERSION
का आउटपुट होने के लिए गुप्त सेट करें :
apt-cache policy valgrind | grep -oP '(?<=Candidate:\s)(.+)'
यह आपको कैशे को अमान्य करने की अनुमति देगा जब एक नया संस्करण केवल रहस्य के मूल्य को बदलकर जारी किया जाता है।
dpkg -L valgrind
का उपयोग करते समय स्थापित सभी फाइलों को सूचीबद्ध करने के लिए किया जाता है sudo apt-get install valgrind
।
अब हम इस आदेश के साथ क्या कर सकते हैं अपने कैश फ़ोल्डर के लिए सभी निर्भरता की प्रतिलिपि बनाएँ:
dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
और भी
के सभी घटकों को कॉपी करने के अलावा valgrind
, यह निर्भरता की प्रतिलिपि बनाने के लिए भी आवश्यक हो सकता है (जैसे कि libc
इस मामले में), लेकिन मैं इस रास्ते पर जारी रखने की अनुशंसा नहीं करता हूं क्योंकि निर्भरता श्रृंखला बस वहां से बढ़ती है। सटीक होने के लिए, अंतिम रूप से वालग्राइंड को चलाने के लिए उपयुक्त वातावरण के लिए प्रतिलिपि बनाने के लिए आवश्यक निर्भरताएँ निम्नानुसार हैं:
- libc6
- libgcc1
- जीसीसी-8-क्षार
इन सभी निर्भरताओं को कॉपी करने के लिए, आप ऊपर दिए गए सिंटैक्स का उपयोग कर सकते हैं:
for dep in libc6 libgcc1 gcc-8-base; do
dpkg -L $dep | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
done
क्या यह सब काम वास्तव में परेशानी के लायक है जब valgrind
पहली जगह में स्थापित करने के लिए आवश्यक सभी को बस चलाना है sudo apt-get install valgrind
? यदि आपका लक्ष्य बिल्ड प्रक्रिया को गति देना है, तो आपको यह भी ध्यान में रखना होगा कि कैश को पुनर्स्थापित करने (डाउनलोड करने और निकालने) में कितना समय लग रहा है, बस स्थापित करने के लिए फिर से कमांड चला रहे हैं valgrind
।
और अंत में कैश को पुनर्स्थापित करने के लिए, यह मानते हुए कि यह संग्रहीत है /tmp/valgrind
, आप कमांड का उपयोग कर सकते हैं:
cp --force --recursive /tmp/valgrind/* /
जो मूल रूप से कैश से लेकर रूट पार्टीशन तक की सभी फाइलों को कॉपी करेगा।
उपरोक्त प्रक्रिया के अलावा, मेरे पास स्रोत से इसे संकलित और संकलित करके "कैशिंग वेलग्रिंड" का एक उदाहरण भी है । कैश अब आकार में लगभग 63 एमबी (संपीड़ित) है और एक को अभी भी अलग से स्थापित करने की आवश्यकता है libc
जो इस तरह के उद्देश्य को हरा देता है।
संदर्भ:
Cache not found for input keys: ***.
। मैंनेVALGRIND_VERSION
सेटिंग> गोपनीयता में रहस्य जोड़ा , क्या यह सही है?