経緯
久しぶりにi.MX6でYoctoをいじろうと思って、Repoを使用してマニフェストを落としてこようと実行したが、上手くいかない。
repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.14.38-6UL_ga
おかしい。Repoのバージョンが上がったから?と思ったが、
まずgit://git.freescale.comが生きていない。
2015年に Freescale が NXP Semiconductors に合併されたのは記憶に新しい。しかしi.MX用のgitリポジトリサイト「git.freescale.com」は最近までは生きていたと思う。少なくとも2019年までは使えたんじゃないかと。
調査
という事で、調査開始。
https://community.nxp.com/t5/i-MX-Processors/git-freescale-com-down/m-p/996004/highlight/true
嗚呼、阿鼻叫喚。そりゃそうだ。…いや、他人事ではない。
このスレッドの作成日時が2020年2月なので、やはりここ1~2年の事の様だ。
TechSupportが「もう復活は無い」と断言している。ヒドス。
上のスレッドによると、git://git.freescale.com のリポジトリは git://github.com/NXP/imx-firmware に移されたとの事で、とりあえず中を見てみるが、それらしきものが無い…なんだよ…
もうちょっと調査。
https://community.nxp.com/t5/i-MX-Processors/git-freescale-com-not-working-Any-new-link/m-p/998841
どうやらgithub.com/NXPの他に https://source.codeaurora.org/external/imx/
にあるらしい。
Code Auroraとは…
QUALCOMMがメインとなり、QUALCOMM製チップセットのオープンソース開発を実施しているサイト。
https://www.wdic.org/w/TECH/Code%20Aurora%20Forum
え、QUALCOMM? NXPの敵じゃないの?
なんか怪しいが、本当にある???どれどれ…
あった。(リリースレイヤーのmeta-fsl-bsp-releaseもあった)
どれ、対象のマニフェストを確認。default.xmlをのぞく。
いや古いままなんかーい!!
どうやら、ブランチに「nxp/」がつくものは古いままの模様。これではRepoで指定したところで上手くいかないんじゃないか?
実際上手くいかなかった。
# repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp.git -b nxp/imx-3.14.38-6UL_ga : # repo sync : fatal: Unable to look up git.freescale.com (port 9418) (No address associated with hostname)
なんやねん…
解決策
これらを見て分かったのは、URLをまず変える事。そりゃそうだ。
git://git.freescale.com/imx ↓以下に変更 https://source.codeaurora.org/external/imx
imx-4.1-krogothなどは上記対応済みなので、Repoで指定すれば取ってこれた。なので、新しいブランチのマニフェストは以下の感じで問題無いはず。
repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp.git -b imx-4.1-krogoth repo sync
しかし、古いマニフェストは対応されていない。
ということで、解決策を2パターンほど考えた。
解決策その1 : Repoを使わず、manifestを解釈して個々のgitリポジトリを持ってくる
個人的にはこっちの方で良いんじゃないかと思っている。
というのも、Repoがもう使いにくくてしょうがない。SSHやPythonのバージョンなど環境の変化で結構振り回される。
また古いバージョンのマニフェストは今後リビジョンがマイナーアップデートされることもないはずなので。新しいバージョンは素直に「nxp/」がついてないブランチをRepoから使用することをお奨めする。
Repoのmanifestを参考に、gitで落としリビジョンを合わせるという力業を実施。
例:default.xml (ブランチ:nxp/imx-3.14.38-6UL_ga)
<?xml version="1.0" encoding="UTF-8"?> <manifest> <default sync-j="2"/> <remote fetch="git://git.freescale.com/imx" name="fsl-release" /> <remote fetch="git://git.yoctoproject.org" name="yocto"/> <remote fetch="git://github.com/Freescale" name="freescale"/> <remote fetch="git://git.openembedded.org" name="oe"/> <remote fetch="git://github.com/OSSystems" name="OSSystems"/> <remote fetch="git://github.com/meta-qt5" name="QT5"/> <project remote="yocto" revision="83aa565d93aacae484976562ef1ae8dbbb6b2bc0" name="poky" path="sources/poky"/> <project remote="yocto" revision="c5326c90d6754c8630504ae29244907b0841c3a9" name="meta-fsl-arm" path="sources/meta-fsl-arm"/> <project remote="oe" revision="10d3c8f85280a0bf867a8e4f84bcda81c290d28e" name="meta-openembedded" path="sources/meta-openembedded"/> <project remote="freescale" revision="89c605386ec81d64b38562acbc66942964fad971" name="fsl-community-bsp-base" path="sources/base"> <copyfile dest="README" src="README"/> <copyfile dest="setup-environment" src="setup-environment"/> </project> <project remote="freescale" revision="436b86e3421736216412bdbb21cd9cb08c758c75" name="meta-fsl-arm-extra" path="sources/meta-fsl-arm-extra"/> <project remote="freescale" revision="836bdf5a9d500ed258f1ddc07d89eca74a704098" name="meta-fsl-demos" path="sources/meta-fsl-demos"/> <project remote="OSSystems" revision="4b27058a8275a5310161459c9bb8f4c52a77762c" name="meta-browser" path="sources/meta-browser" /> <project remote="QT5" revision="fc026381545650e10fdd488d5b2a3b2d78f87793" name="meta-qt5" path="sources/meta-qt5" /> <project remote="fsl-release" name="meta-fsl-bsp-release" path="sources/meta-fsl-bsp-release" revision="fido_3.14.38_6UL_ga" > <copyfile src="imx/tools/fsl-setup-release.sh" dest="fsl-setup-release.sh"/> </project> </manifest>
上のmanifestをgit個々で解釈したshellscript
#!/bin/bash CUR_DIR=`echo $(cd $(dirname $0) && pwd)` mkdir sources cd sources git clone git://git.yoctoproject.org/poky cd poky git checkout 83aa565d93aacae484976562ef1ae8dbbb6b2bc0 cd ../ git clone git://git.yoctoproject.org/meta-fsl-arm cd meta-fsl-arm git checkout c5326c90d6754c8630504ae29244907b0841c3a9 cd ../ git clone git://git.openembedded.org/meta-openembedded cd meta-openembedded git checkout 10d3c8f85280a0bf867a8e4f84bcda81c290d28e cd ../ git clone git://github.com/Freescale/fsl-community-bsp-base mv fsl-community-bsp-base base cd base git checkout 89c605386ec81d64b38562acbc66942964fad971 cp README ${CUR_DIR} cp setup-environment ${CUR_DIR} cd ../ git clone git://github.com/Freescale/meta-fsl-arm-extra cd meta-fsl-arm-extra git checkout 436b86e3421736216412bdbb21cd9cb08c758c75 cd ../ git clone git://github.com/Freescale/meta-fsl-demos cd meta-fsl-demos git checkout 836bdf5a9d500ed258f1ddc07d89eca74a704098 cd ../ git clone git://github.com/OSSystems/meta-browser cd meta-browser git checkout 4b27058a8275a5310161459c9bb8f4c52a77762c cd ../ git clone git://github.com/meta-qt5/meta-qt5 cd meta-qt5 git checkout fc026381545650e10fdd488d5b2a3b2d78f87793 cd ../ git clone https://source.codeaurora.org/external/imx/meta-fsl-bsp-release cd meta-fsl-bsp-release git checkout remotes/origin/nxp/fido_3.14.38_6UL_ga cp imx/tools/fsl-setup-release.sh ${CUR_DIR} cd ../ cd ${CUR_DIR}
まぁ力業だが、もうこれでいい。(他のマニフェストの場合はnameやrevision、その他ファイルコピー箇所などを適宜変更する必要があります。)
解決策その2 : オレオレリポジトリを作り、その中にmanifestを入れ、Repoでそのリポジトリを指定する。
それでも俺はRepoを使いたいんじゃ~!って方はこっちか。というかこっちが正統派?
自身でリポジトリを立ち上げ、その中にマニフェストを作る。で、Repoでそのリポジトリを指定すればOK。
git init manifest # リポジトリ名はお好きに cd manifest vi default.xml
git://git.freescale.com/imx を https://source.codeaurora.org/external/imx に変更して作成。
例:default.xml (ブランチ:nxp/imx-3.14.38-6UL_ga が元データ)
<?xml version="1.0" encoding="UTF-8"?> <manifest> <default sync-j="2"/> <remote fetch="https://source.codeaurora.org/external/imx" name="fsl-release" /> <!-- ここのfetch URLを変更 --> <remote fetch="git://git.yoctoproject.org" name="yocto"/> <remote fetch="git://github.com/Freescale" name="freescale"/> <remote fetch="git://git.openembedded.org" name="oe"/> <remote fetch="git://github.com/OSSystems" name="OSSystems"/> <remote fetch="git://github.com/meta-qt5" name="QT5"/> <project remote="yocto" revision="83aa565d93aacae484976562ef1ae8dbbb6b2bc0" name="poky" path="sources/poky"/> <project remote="yocto" revision="c5326c90d6754c8630504ae29244907b0841c3a9" name="meta-fsl-arm" path="sources/meta-fsl-arm"/> <project remote="oe" revision="10d3c8f85280a0bf867a8e4f84bcda81c290d28e" name="meta-openembedded" path="sources/meta-openembedded"/> <project remote="freescale" revision="89c605386ec81d64b38562acbc66942964fad971" name="fsl-community-bsp-base" path="sources/base"> <copyfile dest="README" src="README"/> <copyfile dest="setup-environment" src="setup-environment"/> </project> <project remote="freescale" revision="436b86e3421736216412bdbb21cd9cb08c758c75" name="meta-fsl-arm-extra" path="sources/meta-fsl-arm-extra"/> <project remote="freescale" revision="836bdf5a9d500ed258f1ddc07d89eca74a704098" name="meta-fsl-demos" path="sources/meta-fsl-demos"/> <project remote="OSSystems" revision="4b27058a8275a5310161459c9bb8f4c52a77762c" name="meta-browser" path="sources/meta-browser" /> <project remote="QT5" revision="fc026381545650e10fdd488d5b2a3b2d78f87793" name="meta-qt5" path="sources/meta-qt5" /> <project remote="fsl-release" name="meta-fsl-bsp-release" path="sources/meta-fsl-bsp-release" revision="fido_3.14.38_6UL_ga" > <copyfile src="imx/tools/fsl-setup-release.sh" dest="fsl-setup-release.sh"/> </project> </manifest>
※「revision=”fido_3.14.38_6UL_ga”」の箇所は「revision=”nxp/fido_3.14.38_6UL_ga”」にしなきゃダメかと思っていたが、どっちでも大丈夫そう。
で、コミットしてrepoでリポジトリを指定してinit。
git commit -m "add manifest"
repo init -u (パス)/manifest repo sync
大きな企業は古いもの、弱いものは簡単に切り捨てますね。
今後も気を付けなければいけません。