新聞中心
在單位中,通常都標(biāo)配了git服務(wù)器用來管理代碼。對(duì)于家庭或者小辦公室,這種方式有點(diǎn)不經(jīng)濟(jì)。當(dāng)然如果是開源項(xiàng)目就簡(jiǎn)單了,剛剛被微軟收購(gòu)的github是理想選擇。但如果沒有打算開源,我今天的話題可能對(duì)你有用。我就屬于喜歡在家中干活的那一類,以前常年開著一臺(tái)電腦做下載,最近改了這個(gè)壞習(xí)慣。但是沒有了長(zhǎng)期開機(jī)的設(shè)備,也就沒有了git server。趁著周末,把一臺(tái)老的路由器改了改,當(dāng)成git server來用,感覺效果爆棚,不能不安利給大家。

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名與空間、虛擬主機(jī)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
硬件
一臺(tái)能夠安裝OpenWRT(或者Linux系統(tǒng)的)路由器,我用的是一臺(tái)老設(shè)備,Netgear WND3700V1。 視你日常工作量大小,準(zhǔn)備一個(gè)空間足夠的U盤,最好是高速的,當(dāng)然這個(gè)高速是指能匹配路由器USB口的標(biāo)準(zhǔn)就足夠。
系統(tǒng)軟件
成文時(shí),OpenWRT的版本是18.06.0,其它版本應(yīng)當(dāng)也可以,OpenWRT挺早就支持git軟件包了。下載地址在:http://downloads.openwrt.org/。也可能是我的問題,但至少看起來,這樣一個(gè)純技術(shù)網(wǎng)站,不FQ已經(jīng)下載不到了。 因?yàn)楦骷衣酚稍O(shè)備的硬件復(fù)雜性,雖然都是同樣的OpenWRT,不同的路由器仍然要下載自己硬件對(duì)應(yīng)的版本。如果之前沒有安裝過OpenWRT的話,建議你在https://openwrt.org/toh/views/toh_fwdownload查詢OpenWRT支持的設(shè)備列表,確認(rèn)自己應(yīng)當(dāng)使用的版本。 OpenWRT的安裝這里不講,請(qǐng)參考官方相關(guān)文檔。通常都是在自己路由器的管理界面使用軟件更新功能,選擇下載的固件文件,上傳隨后升級(jí)。 接著請(qǐng)根據(jù)自己家里網(wǎng)絡(luò)的情況,配置上網(wǎng)設(shè)置各項(xiàng)目,保證基本路由功能工作正常。
管理路由器
OpenWRT18.06.0的默認(rèn)管理方式是使用ssh,方法:ssh root@[IP地址]。根據(jù)路由器的FLASH大小,比較小的FLASH是默認(rèn)沒有WEB GUI界面的,比如我用的這臺(tái)。所幸大多情況下使用命令行配置路由器效率更高,而且有些工作是使用GUI界面做不到的。 OpenWRT的默認(rèn)賬戶用戶名是root,沒有密碼,正常情況下第一次登陸會(huì)要求你修改密碼。在一個(gè)連接公網(wǎng)的環(huán)境中,請(qǐng)盡早登陸修改密碼。
配置鏡像源
如果你不用FQ就能訪問官方的源服務(wù)器的話,請(qǐng)?zhí)^這一節(jié)內(nèi)容。
OpenWRT使用opkg工具來管理擴(kuò)展包。因?yàn)榍懊嫠f的原因,需要配置使用鏡像源來保證所需軟件包的安裝。 中間碰到一個(gè)小麻煩是國(guó)外的鏡像服務(wù)器,基本都使用了https協(xié)議,OpenWRT不能直接支持。國(guó)內(nèi)的鏡像大多倒是http協(xié)議,但鏡像中又缺乏一些驅(qū)動(dòng)包,無法驅(qū)動(dòng)U盤。 所以如果找不到更好的完整源的話,只好把變更源這樣一件小事分成兩步來做。 opkg的源配置文件路徑為:/etc/opkg/distfeeds.conf,首先做一個(gè)備份,然后你可以使用你喜歡的編輯工具修改,我通常都是vi。 把distfeeds.conf文件的內(nèi)容修改為:
src/gz openwrt_core http://openwrt.proxy.ustclug.org/releases/18.06.0/targets/ar71xx/generic/packages
src/gz openwrt_kmods https://downloads.lede-project.urown.net/snapshots/targets/ar71xx/generic/kmods/4.9.117-1-e017c397f3c6ba06dc921b136a63fb36
src/gz openwrt_base http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/base
src/gz openwrt_luci http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/luci
src/gz openwrt_packages http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/packages
src/gz openwrt_routing http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/routing
src/gz openwrt_telephony http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/telephony
這里面使用了兩個(gè)源,分別是:http://openwrt.proxy.ustclug.org和https://downloads.lede-project.urown.net。
接著在OpenWRT命令使用opkg update命令,只要網(wǎng)絡(luò)沒有問題,可以完成源目錄包的更新,當(dāng)然在https的那個(gè)源會(huì)報(bào)錯(cuò),先不用管。
通常的情況下,每次進(jìn)行包安裝工作之前進(jìn)行一次opkg update就夠了,這是下載軟件源中的所有目錄索引到本地。路由器關(guān)機(jī)、或者云端的源內(nèi)容發(fā)生了變化才需要重新執(zhí)行。
隨后安裝https協(xié)議所需的軟件包:
opkg install libustream-openssl ca-bundle ca-certificates
接著再做一次opkg update,這一次,應(yīng)當(dāng)所有的源都可以拿到目錄包了。 如果你有更好的http源,配置https訪問這一步可以省略。
至此,opkg包管理工具算配置完成。喜歡使用GUI界面的話,這時(shí)候可以使用下面命令安裝:
opkg update
opkg install luci
安裝U盤并設(shè)置自動(dòng)加載
如果只是當(dāng)做私有云盤使用,U盤的格式可以隨意。但如果打算用作git倉(cāng)庫(kù)以及用以彌補(bǔ)路由器可憐的FLASH存儲(chǔ),則必須使用Linux專有格式,比如EXT4。所以準(zhǔn)備用在路由器上的U盤你要提前做好備份,因?yàn)楹竺娴陌惭b會(huì)重新格式化U盤。 首先是安裝加載U盤所需的各項(xiàng)驅(qū)動(dòng)和相關(guān)支持工具:
#假設(shè)你已經(jīng)做過opkg udpate
opkg install block-mount e2fsprogs kmod-fs-ext4 kmod-usb3 kmod-usb2 kmod-usb-storage
隨后使用ext4格式,重新初始化U盤:
#注意這一步會(huì)清掉U盤上現(xiàn)有的所有內(nèi)容
mkfs.ext4 /dev/sda1
接著將U盤設(shè)置為路由器啟動(dòng)后自動(dòng)加載:
block detect > /etc/config/fstab
uci set fstab.@mount[0].enabled='1' && uci set fstab.@global[0].check_fs='1' && uci commit
/sbin/block mount && service fstab enable
這時(shí)候可以使用mount命令檢查一下U盤是否加載成功(不需要重啟),如果輸出信息中,通常是在最后一行,如果有類似下面信息表示U盤加載成功了:
/dev/sda1 on /mnt/sda1 type ext4 (rw,relatime,data=ordered)
在我實(shí)驗(yàn)的時(shí)候,有一個(gè)U盤無論如何無法自動(dòng)加載成功,猜測(cè)同U盤型號(hào)或者具體硬件及OpenWRT版本的支持有關(guān)系。就不去深究原因了,碰到這種情況可以使用啟動(dòng)腳本的方式解決,首先執(zhí)行一次mkdir /mnt/sda1,然后在/etc/rc.local文件最后一行增加:
mount /dev/sda1 /mnt/sda1
以后重啟將會(huì)自動(dòng)加載U盤。
安裝git工具包
這一步對(duì)于新款路由器實(shí)在不是事兒,使用opkg一條命令就搞定:
opkg install git
對(duì)于我這款老路由器來講是個(gè)大麻煩,因?yàn)檫@款WND3700這款路由器只有4M的FLASH,相當(dāng)于硬盤的存儲(chǔ)空間。而git軟件包壓縮之后是4.3M,完全盛不下。 這時(shí)候剛才安裝的EXT4格式的U盤就起作用了,我使用手工安裝的方式把git安裝到U盤上,這樣多大的軟件包都不算問題了。 首先下載git軟件包:
cd /mnt/sda1/
wget http://openwrt.proxy.ustclug.org/releases/18.06.0/packages/mips_24kc/packages/git_2.16.3-1_mips_24kc.ipk
注意下載路徑是跟你所使用的路由器版本有關(guān)的,比如上面的下載地址表示OpernWRT18.06.0版本,跑在mips_24kc的芯片上。根據(jù)這些信息,你要尋找自己路由器可用的軟件包,平常這件事情是由opkg幫你做的。 下載完成后,手工解壓取出文件:
tar xzvf git_2.16.3-1_mips_24kc.ipk
#上面的解壓完成通常會(huì)出來3個(gè)文件,我們只使用其中的data.tar.gz文件。
mkdir ipks
cd ipks
tar xzvf ../data.tar.gz
cd ..
# 刪除3個(gè)解壓出的臨時(shí)文件
rm control.tar.gz data.tar.gz debian-binary
所有的文件都保存在/mnt/sda1/ipks/usr路徑下,我們還需要手工完成安裝,才能夠運(yùn)行:
ln -s /mnt/sda1/ipks/usr/bin/git /usr/bin/
ln -s /mnt/sda1/ipks/usr/bin/git-receive-pack /usr/bin/
ln -s /mnt/sda1/ipks/usr/bin/git-upload-archive /usr/bin/
ln -s /mnt/sda1/ipks/usr/bin/git-shell /usr/bin/
ln -s /mnt/sda1/ipks/usr/bin/git-upload-pack /usr/bin/
ln -s /mnt/sda1/ipks/usr/lib/git-core/ /usr/lib/
ln -s /mnt/sda1/ipks/usr/share/git-core/ /usr/share/
此時(shí)git已經(jīng)可以使用了。接下來我們建立工作目錄:
mkdir /mnt/sda1/prjs
ln -s /mnt/sda1/prjs/ /
/prjs目錄是我們的主要存儲(chǔ)目錄。因?yàn)槁酚善髦挥幸粋€(gè)root賬號(hào),也就不用考慮額外的權(quán)限問題。 今后所有的git倉(cāng)庫(kù),都可以在/prjs路徑下另外建目錄來保存。我們來建立一個(gè)測(cè)試倉(cāng)庫(kù)來驗(yàn)證工作是否正常:
mkdir /prjs/test
cd /prjs/test
git init --bare
好了,至此路由器上的所有準(zhǔn)備都已經(jīng)完成。今后增加新的git倉(cāng)庫(kù),使用新的倉(cāng)庫(kù)名稱,重復(fù)上面最后一個(gè)建立test倉(cāng)庫(kù)的操作就可以。
測(cè)試路由器上的git倉(cāng)庫(kù)
回到我們的工作電腦上,隨意建立一個(gè)工作目錄,測(cè)試路由器上的git倉(cāng)庫(kù)是否工作正常,下面假設(shè)我們路由器的IP地址為192.168.1.1,請(qǐng)修改成自己路由器的正確地址。
mkdir testgit
cd testgit
git init .
echo "test information" > abc.txt
echo "測(cè)試信息" > abc1.txt
git add .
git commit -m "something new"
git remote add origin [email protected]:/prjs/test/
git push --set-upstream origin master
最后的git push執(zhí)行后,需要輸入路由器root賬號(hào)密碼,隨后如果顯示類似下面信息,就表示成功了:
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 231 bytes | 231.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To [email protected]:/prjs/test/
570db28..5ab2627 master -> master
自動(dòng)驗(yàn)證
如果不希望每次git push都輸入路由器密碼,可以把自己電腦的公鑰存儲(chǔ)到路由器備案,以后就不需要輸入密碼了,首先拷貝公鑰到路由器:
scp ~/.ssh/id_rsa.pub [email protected]:~/
接著在路由器上執(zhí)行:
cat id_rsa.pub >> /etc/dropbear/authorized_keys
可以使用ssh來測(cè)試是否生效,ssh [email protected]之后,如果不再要求輸入密碼直接登錄了路由器,表示自動(dòng)驗(yàn)證生效了。
新聞名稱:如何將路由器改裝成git服務(wù)器?
轉(zhuǎn)載來源:http://fisionsoft.com.cn/article/ccsjesj.html


咨詢
建站咨詢
