जब मैं एक छवि सेंकना चाहता हूं तो मैं उन सभी फाइलों को सूचीबद्ध करना चाहता हूं जो बिटबेक लाएंगे।

वर्तमान में, मैं bitbake core-image-minimal -c fetchall निष्पादित करके एक Yocto छवि को बेक करने के लिए आवश्यक सभी फ़ाइलों का SRC_URI प्राप्त करने और फिर लॉग फ़ाइलों को पार्स करने में सक्षम हूं।

क्या फाइलों को डाउनलोड करने की आवश्यकता के बिना समान परिणाम प्राप्त करने का कोई आसान तरीका है?

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

> bitbake core-image-minimal -c fetchall --print-only
2
Bechir 15 मई 2018, 11:23

4 जवाब

सबसे बढ़िया उत्तर

आम तौर पर बिटबेक ऐसी कार्यक्षमता प्रदान नहीं करता है।

लेकिन मैं सरल .bbclass फ़ाइल बनाने में सक्षम एक सरल समाधान डायन बनाने में सक्षम था जो सभी व्यंजनों में विरासत में मिली है, इसे local.conf फ़ाइल में जोड़कर, कृपया मेरे चरणों को देखें इसे संग्रहीत करने का आदेश:

कदम:

  1. आइए एक वर्ग प्रिंट-src.bbclass फ़ाइल बनाएं जिसका उपयोग SRC_URI चर प्राप्त करने और प्रिंट करने के लिए किया जाता है (इस वर्ग फ़ाइल को परत में संग्रहीत करना याद रखें जो conf/bblayers.conf में उपलब्ध है) :

    $ cat print-src.bbclass
    
    python do_print_src () {
        # should probably be indented
        srcuri = d.getVar('SRC_URI', True).split()
        bb.warn("SRC_URI look like: %s" % srcuri)
    }
    
    addtask do_print_src before do_fetch
    
  2. अपनी conf/local.conf फ़ाइल में INHERIT += "print-src" जोड़ें

संपादित करें: bitbake --runonly विकल्प का उपयोग करना महत्वपूर्ण है, जो निर्दिष्ट लक्ष्य के लिए टास्कग्राफ के विशिष्ट कार्य को चलाने की अनुमति देता है (--runonly के साथ) em> विकल्प do_print_src को print_src के रूप में उपयोग करने की आवश्यकता है),

संपादित करें: कृपया ध्यान दें कि --runall=RUNALL और --runonly=RUNONLY को योक्टो सूमो रिलीज 2.5,

$ bitbake core-image-minimal --runonly print_src
Loaded 1236 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.37.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal-4.8"
TARGET_SYS           = "i586-poky-linux"
MACHINE              = "qemux86"
DISTRO               = "poky"
DISTRO_VERSION       = "2.5"
TUNE_FEATURES        = "m32 i586"
TARGET_FPU           = ""
meta                 
meta-poky            
meta-yocto-bsp       = "master:13cc30cd7de4841990b600e83e1249c81a5171dd"

Initialising tasks: 100% |##########################################################################################################################################################################| Time: 0:00:00
NOTE: Executing RunQueue Tasks
WARNING: ptest-runner-2.2+gitAUTOINC+49956f65bb-r0 do_print_src: SRC_URI look like: ['git://git.yoctoproject.org/ptest-runner2']
WARNING: grep-3.1-r0 do_print_src: SRC_URI look like: ['http://ftp.gnu.org/gnu/grep/grep-3.1.tar.xz', 'file://0001-Unset-need_charset_alias-when-building-for-musl.patch']
...
... 
NOTE: Tasks Summary: Attempted 201 tasks of which 0 didn't need to be rerun and all succeeded.

Summary: There were 202 WARNING messages shown.

कृपया नमूना चेतावनी आउटपुट लॉग लाइन देखें:

चेतावनी: ptest-runner-2.2+gitAUTOINC+49956f65bb-r0 do_print_src: SRC_URI इस तरह दिखता है: ['git://git.yoctoproject.org/ptest-runner2']।

7
Stefan Hegny 11 पद 2019, 13:15

मुझे कुछ इस तरह की जरूरत थी और अब से पहले वहां से भाग लिया।

मैं निम्न आदेश निष्पादित करके उपयोग किए गए यूआरआई की एक गन्दा सूची उत्पन्न कर सकता हूं:

bitbake -g zlib && cat recipe-depends.dot | \
grep -v -e '-native' | grep -v digraph | \
grep -v -e '-image' | awk '{print $1}' | \
sort | uniq | xargs -I {} -t bitbake -e {} | grep SRC_URI=

यह आपको सभी यूआरआई और एक नुस्खा और कुछ टिप्पणियों में उपयोग की जाने वाली फाइलें देता है।

एक सही समाधान नहीं है, लेकिन मैं देखूंगा कि क्या मैं इसमें सुधार कर सकता हूं।

1
TafT 15 मई 2018, 12:36

मैंने downloads में *.src फाइलें बनाने के लिए पोकी को पैच किया, जिसमें पैकेज का प्रभावी फ़ेच URL शामिल है।

 bitbake/lib/bb/fetch2/__init__.py | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index b853da30bd..03e84e0919 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -1257,16 +1257,16 @@ class FetchData(object):

         # Note: .done and .lock files should always be in DL_DIR whereas localpath may not be.
         if self.localpath and self.localpath.startswith(dldir):
-            basepath = self.localpath
+            self.basepath = self.localpath
         elif self.localpath:
-            basepath = dldir + os.sep + os.path.basename(self.localpath)
+            self.basepath = dldir + os.sep + os.path.basename(self.localpath)
         elif self.basepath or self.basename:
-            basepath = dldir + os.sep + (self.basepath or self.basename)
+            self.basepath = dldir + os.sep + (self.basepath or self.basename)
         else:
              bb.fatal("Can't determine lock path for url %s" % url)

-        self.donestamp = basepath + '.done'
-        self.lockfile = basepath + '.lock'
+        self.donestamp = self.basepath + '.done'
+        self.lockfile = self.basepath + '.lock'

     def setup_revisions(self, d):
         self.revisions = {}
@@ -1607,6 +1607,15 @@ class Fetch(object):
             m = ud.method
             localpath = ""

+            p = "%s.src"%ud.basepath
+            d = os.path.dirname(p)
+            if d != '':
+                bb.utils.mkdirhier(d)
+            with open(p, 'wb') as f:
+                data = "%s" % ud.url
+                f.write(bytes(data, 'ASCII'))
+            return True
+
             if ud.lockfile:
                 lf = bb.utils.lockfile(ud.lockfile)

चल रहे bitbake core-image-minimal -c fetchall परिणाम:

$> find downloads/ -name '*.src' | head -n 5
downloads/lzop-1.03.tar.gz.src
downloads/libtheora-1.1.1.tar.bz2.src
downloads/mpfr-3.1.5.tar.xz.src
downloads/makedevs.c.src
downloads/expat-2.2.0.tar.bz2.src

यह एक इष्टतम समाधान नहीं है, लेकिन मुझे उम्मीद है कि इस तरह की सुविधा मेनलाइन स्ट्रीम तक पहुंच जाएगी।

2
Bechir 15 मई 2018, 15:54

मैंने प्रश्न में समाधान के आधार पर स्क्रिप्ट लिखी। असल में मुझे सभी स्रोतों की एक सीएससीओपी परियोजना बनाने की ज़रूरत है, और इसलिए मुझे सभी यूआरआई सूचीबद्ध करने और सभी रेपो क्लोन करने की आवश्यकता है। मैंने 2 स्क्रिप्ट लिखी हैं 1) सभी SRC_URI और शाखाओं को सूचीबद्ध करें 2) एक ही निर्देशिका में सभी कोड स्थापित करें (क्लोन)

listURI.sh

#!/bin/bash
TMP_FILE="___x__2242230p.txt"
SRCH_FILE="log.do_fetch"
TIME=$(date +%Y-%m-%d-%H-%M)
OUT_FILE="Project-$TIME.txt"
DEF_BRANCH="master"
BRANCH=""
SRC_URI=""

function usage {
    echo "Usage : $0 < -f | -g > <Component-List-file>"
    echo "Options :"
    echo "        -f    : Run bitbake fetch and collect URI"
    echo "        -g    : Get URI from Already fetched Project"
}

if [ $# -eq 0 ]
then
    usage
    exit
fi

if [ "$1" == "-f" ] || [ "$1" == "-g" ];then
    if [ "$1" == "-f" ] && [  -z "$2" ];then
        echo "Should pass Project-Name after -f Option"
        exit
    fi
else
    echo "Unknown Option"
    usage
    exit
fi
POKYROOTDIR=`basename "$PWD"`
#echo $POKYROOTDIR
if [[ $POKYROOTDIR != "build" ]];then
    echo "You are not on poky/build (Sourced Poky) Directory"
    exit 0
fi
POKYROOTDIR=$PWD

if [ "$1" == "-f" ];then
    echo "Running === bitbake -c fetchall $2 -f --no-setscene =="
     bitbake -c fetchall $2 -f --no-setscene
fi

if [ "$1" == "-g" ];then
    if [ ! -d tmp/work ];then
        echo " Please run == bitbake -c fetchall <image> -f --no-setscene == before this"
        usage
        exit
    fi
fi

echo "Looking for URIs --- It may take couple of minuites!"

rm -rf $OUT_FILE
cd tmp/work
find . -name $SRCH_FILE -exec grep -i 'DEBUG: For url git' {} \; -print > $POKYROOTDIR/$TMP_FILE
cd $POKYROOTDIR

while IFS= read -r line
do
      #echo "$line"
      BRANCH=$(echo $line | awk -F"branch=" '/branch=/{print $2}' | sed -e 's/;/ /' | awk '{print $1}')
      SRC_URI=$(echo $line | cut -d';' -f1-1 | awk -F"url" '/url/{print $2}' | awk '{print $1}' | sed -e 's/git:/ssh:/')

      if [ ! -z "$BRANCH" ] && [ ! -z "$SRC_URI" ];then
          echo "$BRANCH  $SRC_URI" >> $OUT_FILE
      elif [ ! -z "$SRC_URI" ];then
          echo "$DEF_BRANCH  $SRC_URI" >> $OUT_FILE
      fi

    if [ ! -z "$BRANCH" ];then
      echo "Found URI : BRANCH:$BRANCH URI:$SRC_URI"
    elif [ ! -z "$SRC_URI" ];then
        echo "Found URI : BRANCH:Default URI:$SRC_URI"
    fi
      #echo "$BRANCH  $SRC_URI" >> $OUT_FILE
done < "$TMP_FILE"

#echo "=================== OUT PUT ==========================="
#cat $OUT_FILE

rm -rf $TMP_FILE


echo "----------------INFO-----------------"
echo "Project Creation: Success"
echo "Project Path      : $POKYROOTDIR"
echo "Project file      : $OUT_FILE"

echo "-------------------------------------"

installURI.sh

#!/bin/bash

function usage {
    echo "Usage : $0 <List-file>"
}

if [ $# -eq 0 ]
then
    usage
    exit
fi

if [ -z "$1" ];then
    usage
    exit
fi


if [ ! -z "$(ls -A $PWD)" ]; then
    echo "Directory ($PWD) must be Empty.... else it will mess up project creation"
    exit
fi

if [ ! -f $1 ];then
    echo "list file ($1) not found"
    usage
    exit
fi

filename=$1
while read -r line; do
    name="$line"
    echo "Fetching Projects"
    git clone -b $line
done < "$filename"

echo "----------------INFO-----------------"
echo "Project Creation: Success"
echo "Project Path    : $PWD"
echo "-------------------------------------"
0
Rashmi Ranjan Rout 22 पद 2019, 13:11