2022年12月26日 星期一

自行架設的Gitlab被鎖住解決辦法

先說明,這是"自行架設"的才能這樣做。如果是gitlab官方同時又是個體戶那百分之百是沒救了。

大概可以分成兩種方式去解。第一種是透過gitlab後台指令去修改密碼。第二種就是進入到管理網頁修改。這邊的狀況比較複雜,假設來讀這篇文章的人跟我一樣是接受整個gitlab server 的檔案,後續可以用Docker進行掛載。但是當初移交給你的人當初只有給你檔案,沒有移交administrator的密碼。

這邊需要釐清幾個名詞:

  1. username : 這是當初使用者設定的帳號名稱。不要跟id搞錯。
  2. ID : 這是一開始註冊的時候,gitlab server給你的流水號。通常大家不會記得這個號碼。root的編號就是1。
  3. email : 就是當初註冊的email
username跟ID比較容易搞亂。


1. 使用後台指令reset密碼

container起來以後,用以下指令:

gitlab-rake "gitlab:password:reset"

這邊沒有用到sudo是因為在container底下本來就是root了。如果是在單機版上,記得加上sudo。

後續就會有一連串問答。

如果已經知道username,那也可以直接用username進行:

sudo gitlab-rake "gitlab:password:reset[USERNAME]"

進行到這邊就會有一連串的密碼問答。想透過後gitlab console進行密碼更換也可以參考這篇文章

通常修改密碼的狀態下都是伴隨打錯密碼太多次造成block。或是LDAP跟localhost註冊相衝[註1]或是LDAP的檢查時機有誤[註2],都可能造成帳號鎖住,這狀況可看底下說明。


2. 使用後台指令把block狀態解除

首先把gitlab console打開:

sudo gitlab-rails console -e production

接下來可以用email解開

user = User.find_by(email: 'admin@local.host') user.unlock_access!

或是用id來解開

user = User.where(id: 1).first user.unlock_access!

如果覺得有where不好看,也可以用稍微優雅的方式

user = User.find(1) user.unlock_access!


或是用username來解開

user = User.find_by_username 'exampleuser' user.unlock_access!


其他事項1: 修改administator進入管理頁面

gitlab的administrator使用的ID是1,也就是用後台的方式把ID為1的密碼改掉。接下來到登錄頁面後使用"root",並且把剛剛修改的密碼打上就能進入管理頁面。


其他事項2: 如果因為被LDAP連結連錯而被鎖住

首先要先進入到管理頁面,把左邊的scrolling bar拉下來:

Overview -> users 

在右邊主欄位可以看到"blocked"的頁面。進入後可以看到被鎖住的使用者。點入後找到"identity"的tab,進去以後把gitalab連結上的credential刪除即可。

接下來回到原本user的管理頁面,該user最旁邊的"三點"選單裡面的"unlock"選項就會出現。

但這邊要記住,如果該使用者又帶有相同email的ldap進入,有可能會再度造成連結錯誤。所以建議有localhost帳號的使用者就不要再用ldap登錄。



註1. LDAP與本地端相衝問題

當初接到這個server檔案時,本來已經有用我自己的帳號註冊了一個username。但是後來實驗室有新增LDAP,這個LDAP的username如果也跟gitlab的username一樣,有可能就會直接被gitlab系統連結起來。這時候如果LDAP server有更新,有可能會對這邊造成影響。

註2. LDAP連結錯誤

gitlab檢查openLDAP的時候,只會確認"該使用者有無在LDAP名單中"。假設該使用者從LDAP中除名,那gitlab就會自動把該員鎖起來。以我自身狀況來看,就是本來我在LDAP中註冊了一個測試帳號並使用了跟local端gitlab帳號一樣的email,LDAP就自動幫我連結過去。結果我測試完畢後就把該帳號從LDAP移除。Gitlab偵測到我移除後,就直接把我的帳號鎖起來。這時候如果要處理,要回到管理頁面。指令目前沒有看到有人分享處理辦法。





references:

https://docs.gitlab.com/ee/security/unlock_user.html

https://docs.gitlab.com/ee/security/reset_user_password.html

https://docs.gitlab.com/ee/security/reset_user_password.html#reset-the-root-password

https://gitlab.com/gitlab-org/gitlab-foss/-/issues/13179

2022年12月23日 星期五

使用Certbot完成Let'sencrypt SSL申請

首先要依照官網進行certbot安裝

certbot需要透過snap安裝,目前Ubuntu應該預設都有安裝。所以這邊直接跳到安裝Certbot:

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo snap set certbot trust-plugin-with-root=ok

跟root掛完後,如果跟我一樣懶,是可以選擇使用外掛,或是參考別人的文章進行ACME挑戰。這邊紀錄使用cloudflare讓certbot自動幫我進行ACME挑戰:

sudo snap install certbot-dns-cloudflare

==========================================================

以上進行完畢後,就需要開始把Cloudflare上面的API key寫出來。這邊會需要製作一個.ini檔,讓certbot吃。假設該檔名為certbot.ini,內容應該如下:


# Cloudflare API credentials used by Certbot
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234


其中dns_cloudflare_email就是在clouflare上面的帳號,底下api key可以到 https://dash.cloudflare.com/profile/api-tokens 這網頁底下,找出Global API key,在把內容貼上即可。但因為這邊的帳號密碼還有api key有點敏感,所以建議認證完畢後就把ini砍掉。

接著進行Cerbot認證,letsencrypt支援wildcard網域認證:

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ./certbot.ini -d *.markliou.tw

認證完畢後,就可以在 /etc/letsencrypt/live/markliou.tw底下找到認證檔。

基本上會用到的就兩個:

  • privkey.pem : 這就是privary key
  • fullchain.pem: 這是public key。因為letsencrypt會連同上面的一些server一起認證,所以內容會比較多。
把以上幾個key放到正確位置後就能開始運作。


Rerefernce:
  1. https://certbot.eff.org/instructions?ws=other&os=ubuntufocal
  2. https://certbot-dns-cloudflare.readthedocs.io/en/stable/#credentials
  3. https://blog.miniasp.com/post/2021/02/11/Create-SSL-TLS-certificates-from-LetsEncrypt-using-Certbot



2022年12月16日 星期五

Asana與gitlab的連動方式

 目前的Gitlab有開放跟Asana的聯動方式,但僅限於把特定任務進行completed checking。

  1. 到asana的console , 點下"create new token",把token存下來。請記得這個token只會出現一次,所以如果弄丟了就永遠看不到,到時就是回來重新申請。
  2. 到gitlab的頁面下,進入預計要進行連動的專案。到最左邊的Settings -> integrations,點擊Asana,並且將剛剛從Asana拿到的API token,大概會變成底下圖的樣子:



  3. 完成以後回到上面的頁面就可以看到Asana打勾了。



使用方式

推code的時候,在commit的欄位使用以下兩種方式:

  1. 把Asana的task號碼貼上。Asana的task號碼取得方式就是把asana打開後,有一個迴紋針圖樣點下去後就會copy一個link address,大概長這樣: https://app.asana.com/0/1203267114681956/1203488262458318/f  
    其中1203488262458318 (上面黑體字的標定位置)就是號碼。把號碼加上#放到commit comment裡面(#1203488262458318 ),Asana的task update底下就會自動加上該commit的連結。
  2. 可以把該連結直接放到commit comment裡面。只是看起來會比第一種方式不乾淨,但效果一樣。
如果想把Asana的項目直接打勾,可以用以下關鍵字(可參閱gitkab官網說明文件)

  • fix
  • fixed
  • fixes
  • fixing
  • close
  • closes
  • closed
  • closing



references:

  • https://docs.gitlab.com/ee/user/project/integrations/asana.html

2022年12月12日 星期一

Gitlab container版升級紀錄

寫在前面

Gitlab安裝的時候會有自動生成管理帳號,且在架設container的時候也會因為不同帳號而會有不同的管理與讀寫權限。因此如果要把A地的gitlab搬移到B地時,建議使用rsync連同整個資料夾的擁有者和權限都一起copy。用法是:

rsync -avp <origianl folder> <desc folder>



公司的Gitlab使用12.1.1-ce0使用了很久。準備要升級。

不過因為configure差異太多,沒辦法一步到位,所以必須要一版一版慢慢升上去。以下紀錄升版過程:


12.2.12-ce0

12.4.6-ce0

12.6.0--ce0

12.8.0-ce0

12.10.0-ce0

13.0.0-ce0

13.12.15-ce0

14.0.12-ce0

14.2.0-ce0

從14.2.0開始,在檔案系統有些許變革。所以需要進入到conainter裡面把檔案系統打開後再進行reconfigure(可參考: https://blog.csdn.net/OldDirverHelpMe/article/details/106536972 ),不然會卡在某個ruby_block的區段裡出不來。(後面有蠻多機會碰到這狀況的,但解法都一樣)

以下為參考指令:

sudo docker run -it -v `pwd`/config:/etc/gitlab -v `pwd`/data:/var/opt/gitlab gitlab/gitlab-ce:14.2.0-ce.0 bash
runsvdir-start &

gitlab-ctl reconfigure

升級成功後,再繼續往下走

14.3.1-ce.0

14.5.1-ce.0

14.7.1-ce.0

14.9.1-ce.0

14.9.5-ce.0

往14.10升級時會碰到migrate的問題,因此要進入14.10.2 的 container執行以下指令:

gitlab-rake  gitlab:background_migrations:finalize[ProjectNamespaces::BackfillProjectNamespaces,projects,id,'[null\,"up"]']

gitlab-ctl reconfigure

14.10.2-ce.0

14.10.5-ce.0

15.0.0-ce.0

15.2.0-ce.0

15.4.0-ce.0

15.6.2-ce.0

 

Gitlab 官方建議升級方式

可參考: https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/




iscsi 連線問題筆記

如果要進行umount但是出現target buzy sudo fuser -km 掛載點 sudo umount 掛載點 iSCSI重啟 sudo open-iscsi restart  掛載lun iscsiadm -m discovery -t sendtargets -p...