2017/10/25

gerrit ssh

先用 openID 認證方式進入mygerrit 網頁。
利用網頁功能在mygerrit註冊一個新帳號 ggininder

ggininder 的 user 功能表裡,有一個 ssh public key。
凡是想要線到 mygerrit 的機器,都要把 他的 public key 加進來。

所以到另一台 pc 上,把 id_rsa.pub 的內容 copy 到 mygerrit, ggininder 功能網頁的 ssh public key 框框裡。
按下 add 之後,就可以了。

pc 測試 ssh 連線道 mygerrit:
ssh -p 29418 ggininder@mygerrit

Unable to negotiate with mygerrit port 29418: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
fail.
google 說新版debian 就會有這個問題,參考 openssh 的 legacy issue
改:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -p 29418 ggininder@mygerrit

Connection to 192.168.145.137 closed by remote host.
Connection to 192.168.145.137 closed.
這樣就 OK 了。,

因為太麻煩,所以可以寫在 .ssh/config 裡...
Host mygerrit
Port 29418
    user ggininder
    KexAlgorithms +diffie-hellman-group1-sha1

順便把 login port 和 user name 都寫了,
這樣,只要:
ssh mygerrit
就可以。

commit 的時候 git config 的 email address 必須要跟 mygerrit 的 user:ggininder 設定的 contact info 的 email address 一樣。
並且,在mygerrit 中填完 email 帳號後,要在 mail 中 confirm 後才會有效。


.ssh/config
如果同一個 host 有 gerrit 和 ssh,上面的寫法,會讓一般的 ssh 反而沒辦法連線。
所以要加一個...
Host mygerritssh
    Hostname mygerrit
    Port 22
這樣,就用 ssh mygerritssh 代表一般 ssh 連線。
ref:simplify your life with an ssh config file

2017/10/19

gerrit test

就照這個 來吧,比較新...

在 pi3, stretch lite 上。

..配合這個,..在 debian 系統上..

openjdk-8-jre
git
apache2-utils

要是只是測試一下。
參考 https://gerrit-review.googlesource.com/Documentation/linux-quickstart.html
java -jar gerrit-2.14.5.1.war init -d /home/gerrit2/sitedata


第一次 push 出現錯誤;
Counting objects: 3, done.
Writing objects: 100% (3/3), 238 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done    
remote: ERROR: [6f52422] missing Change-Id in commit message footer
remote: 
remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 charles.chang@raspberrypi:hooks/commit-msg ${gitdir}/hooks/
remote: And then amend the commit:
remote:   git commit --amend
remote: 
To ssh://172.16.110.4/test1.git
 ! [remote rejected] HEAD -> refs/for/master ([6f52422] missing Change-Id in commit message footer)
參考 這一篇,好像可以disable 掉..

在 project settings 中把 Change0-Id 改 FALSE 就可以了。

2017/10/17

raspberry pi 3, stretch. wifi setup

raspbian 下載 lite
unzip, dd 到 sd
mount sd part 1 進來,修改 config.txt,最後加一行
dtoverlay=pi3-disable-bt

這樣就可以用 版邊,從角落開始算,3(GND), 4(TX), 5(RX) 做 console
開機。
sudo raspi-config
expand root partition
reboot

?

今天..dd lite image,修改 config.txt,加入 wpa_supplicant.conf,之後開機。
竟然 wifi 就 ready 了,已經連好了。
然後 boot 也自動 resize root partition。


紀錄一下 rapbian stretch (不是 lite),設定完 wifi 後的一些 config..
在 /etc/network/ 下..
if-up/if-down/if-pre-up/if-post-down .d 下,都有 wpasupplicant 這個 link,link 到 ../../wpa_supplicant/ifupdown.sh

/etc/wpa_supplicant/wpa_supplicant.conf:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=TW

network={
 ssid="MySSID"
 psk="MyPassword"
 key_mgmt=WPA-PSK
}

jessie 也有支援boot 直接設定喔:headless raspberry setup
這一篇有 jessie, stretch 設定方式的比較

2017/10/13

yocto -- devshell

要是想要自己下 make 命令。可以用
bitbake recipes-name.bb -c devshell

會開一個 terminal,把 source unpack and patch 好,然後環境變數都設好。

如果Makefile 有設置良好,有時候 make 時,會有 Error:
ERROR: ld.so: object 'libpseudo.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
參考這一篇
export PSEUDO_UNLOAD=1
之後,ERROR 就消失了。

2017/10/11

reading notes on ..embedded linux with yocto project

Bitbake 源自於 Gentoo 的 portage 系統,雖然現在已經完全分開了。

bitbake 使用的資料(metadata) 可以分為三種類型:
  • configuration : .conf
    Global 放的設定
  • classes : .bbclass
    給recipes include 用的,避免一堆 recipes 要重複寫一堆code
  • recipes: .bb,bbappend
    bitbake 看這個決定動作

bitbake parsing 的順序:
先到目前目錄 (build) 下,找 bblayares.conf,裡面的 BBLAYERS 變數會指出需要parse 的 其他 layer 目路。
BBLAYERS 有次序之分,所以要先被parse 的要放在前面。

bitbake 到 BBLAYERS 指定的每個 layer 去,先找看看有沒有 meta/conf/bitbake.conf
並且follow include 命令去 include 其他 file

麻煩的recipes 相依

recipes 中可以用 DEPENDS 和 PROVIDES 兩個變數來說明這個recipes 需要的東西。

DEPENDS 和 PROVIDES 有點問題。
foo_1.0.bb 有 DEPENDS += bar
那磨:
  • bar_version.bb
  • XOXO.bb 中有: PRIVIDES = bar
以上都會被 foo_1.0.bb 列為依賴的 recipes

所以,有可能很多 recipes 都有 PROVIDES = bar,所foo_1.0.bb 有很多package 可以選。
這就要用 PREFERRED_PROVIDER_name = XOXO 來指定foo_1.0.bb 真的想用那一個。

fetch -- download files

bitbake 執行 do_fetch 時,會去看 recipes 中的 SRC_URI 變數。
其中,可以用 ${PV} 代表版本號。
bitbake 會去下載source 到 DL_DIR 這格目錄。
同時檢查md5dum, sha256sum 和 bb 中數值一部一樣。
檢查正確,就會在 DL_DIR 中另外create 一個 XXOO.filename.done ,

do_fetch 和 git

SRC_URI 是 git://uri...的話,bitbake 就會clone source 到 DL_DIR/git2/-git url- 下。

Bitbake 的 tasks

用 bitbake recipes-name -c listtasks
可以列出該 recipes 所有的 task

root filesystem 製作

每個 recipes 與 rootfs 相干的部份會由 do_rootfs 這格 subtask 來完成。
IMAGE_INSTALL 和 IMAGE_FEATURES 包函了會加入rootfs 的 packages。

之後, PACKAGE_EXCLUDE 包含不要放入 rootfs 的 package 列表。
bitbake 把 IMAGE_INSTALL/FEATURES 統整後,再比對,挑出要放進去的 package。
但是如果有相依性的需求,即使被劣在 EXCLUDE 中,也一樣會被放進 rootfs。

build 目錄的內容

fetch 的時候,download source 到 DL_DIR。
解開/clone source 到 tmp/wocdrk,有需要 patch 的也patch 好。
然後在 tmp/work 下做 configure,build。
build 完,有要做make install 之類動作的,就會放到各自 tmp/work/..../image 下。
之後,把其他package 需要的header file,share library 都放到tmp/sysroot,讓其他 package build 的匙時候使用。

work 目錄

2017/10/6

在 qtbase/../git/src/plugins/platforms/eglfs
然後 platforms 下的 platform.pro 有:
contains(QT_CONFIG, eglfs) {
    SUBDIRS += eglfs
    SUBDIRS += minimalegl
}
所以 QT_CONFIG 要有 eglfs
在 src/configure 可以看到是在 call configure 時以參數傳進來的。

到 meta-qt/recipes-qt/qt5/ 下, qtbase_git.bb 有..
qtbase_git.bb:PACKAGECONFIG[eglfs] = "-eglfs,-no-eglfs,drm"
所以 package config 要有 eglfs