共計 9273 個字符,預計需要花費 24 分鐘才能閱讀完成。
如何利用 onedrive 加 packerpebuilder 實現(xiàn)本地網絡統(tǒng)一裝機,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
今天,我們將用 onedrve 結合 packerpebuilder 實現(xiàn)本地也能像云主機一樣裝機,使遠程成為本地裝機 app,實際上這個思路自 packerpebuilder 一開始就有了,只是一直沒有找到合適能用的網盤。
前置改動
把 tmpmirror 也消除了。調整了一些注釋,如整合 checkdeps 和 selectmirror 為 prepare prerequisites,selectmirror 經過重構變成 select1stvalidmirrorfrom3():
function Select1stValidMirrorFrom3(){ [ $# -ge 1 ] || exit 1
declare -A MirrorTocheck
MirrorTocheck=([Debian0]= [Debian1]= [Debian2]= )
echo $1 |sed s/\ //g |grep -q ^http://\|^https://\|^ftp:// MirrorTocheck[Debian0]=$(echo $1 |sed s/\ //g
echo $2 |sed s/\ //g |grep -q ^http://\|^https://\|^ftp:// MirrorTocheck[Debian1]=$(echo $2 |sed s/\ //g
echo $3 |sed s/\ //g |grep -q ^http://\|^https://\|^ftp:// MirrorTocheck[Debian2]=$(echo $3 |sed s/\ //g
for mirror in $(echo ${!MirrorTocheck[@]} |sed s/\ /\n/g |sort -n |grep ^Debian )
do
CurMirror= ${MirrorTocheck[$mirror]}
[ -n $CurMirror ] || continue
# CheckPass1= 0
# DistsList= $(wget --no-check-certificate -qO- $CurMirror/dists/ |grep -o href=.*/ |cut -d -f2 |sed /-\|old\|Debian\|experimental\|stable\|test\|sid\|devel/d |grep ^[^/] |sed -n 1!H;$g;s/\n//g;s/\//\;/g;$p )
# for DIST in `echo $DistsList |sed /\n/g `
# do
# [[ $DIST == jessie ]] CheckPass1= 1 break;
# done
# [[ $CheckPass1 == 0 ]] {
# echo -ne \njessie not find in $CurMirror/dists/, Please check it! \n\n
# bash $0 error;
# exit 1;
# }
CheckPass2=0
ImageFile= SUB_MIRROR/dists/jessie/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
[ -n $ImageFile ] || exit 1
URL=`echo $ImageFile |sed s#SUB_MIRROR#${CurMirror}#g `
wget --no-check-certificate --spider --timeout=3 -o /dev/null $URL
[ $? -eq 0 ] CheckPass2=1 echo $CurMirror break
done
[[ $CheckPass2 == 0 ]] {
echo -ne \033[31mError! \033[0minitrd.gz not find in $CurMirror/jessie/main/installer-amd64/current/images/netboot/debian-installer/amd64/! \n
bash $0 error;
exit 1;
}
MIRROR=$(Select1stValidMirrorFrom3 http://httpredir.debian.org/debian http://www.shalol.com/cn/d/debian http://http://archive.debian.org/debian)
[ -n $MIRROR ] echo -en Select Mirror ......: echo -en [\033[32m ${MIRROR} \033[0m]\n || exit 1
主體改動
整合 prepare parepare dist files 包括 downloading basic kernel and rootfs files(將它提前,邏輯更合理。)和 downloading repo pkgs files,,以及接下來的 PrepareDDessentials(其原來內部下載 deb 的邏輯整合到與下載 full udeb 一起),,并將它們都變成可復用的函數(shù)和函數(shù)調用 buildrepo()和 PrepareDDessentials().
prepare parepare dist files 與 prepare others 是并列的:前三者是大資源文件,后三者是小參數(shù)文件,將二者中間延時變量變成 2s,各內部延時 3s(內部還去掉了細節(jié)方面,肯定情況下的一些 echo 輸出,改為直接 exit 1,改為由主要的幾句話來 echo,界面輸出更清),共 5s
wget 要調用 ssl client 才能 tls certificate 已完善,buildrepo()更強大,支持 sed s/(+|~)/-/g 處理鏈接中的 + 號和~ 號(tcb 上的 onemanager 不支持這類特殊符號),和更強大更邏輯清楚的拉取安裝 deb pkgs 支持:
IncPkgrepo= 1
declare -A OPTPKGS
OPTPKGS=( [ libc1]= pool/main/g/glibc/libc6_2.28-10_amd64.deb
[fmtlibc]= xz
[binlibc]=
[common1]= pool/main/g/gnutls28/libgnutls30_3.6.7-4+deb10u3_amd64.deb
[common2]= pool/main/p/p11-kit/libp11-kit0_0.23.15-2_amd64.deb
[common3]= pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_amd64.deb
[common4]= pool/main/n/nettle/libnettle6_3.4.1-1_amd64.deb
[common5]= pool/main/n/nettle/libhogweed4_3.4.1-1_amd64.deb
[common6]= pool/main/g/gmp/libgmp10_6.1.2+dfsg-4_amd64.deb
[fmtcommon]= xz
[bincommon]=
[busybox1]= pool/main/b/busybox/busybox_1.30.1-4_amd64.deb
[fmtbusybox]= xz
[binbusybox]= bin/busybox
[wgetssl1]= pool/main/libi/libidn2/libidn2-0_2.0.5-1+deb10u1_amd64.deb
[wgetssl2]= pool/main/libp/libpsl/libpsl5_0.20.2-2_amd64.deb
[wgetssl3]= pool/main/p/pcre2/libpcre2-8-0_10.32-5_amd64.deb
[wgetssl4]= pool/main/u/util-linux/libuuid1_2.33.1-0.1_amd64.deb
[wgetssl5]= pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_amd64.deb
[wgetssl6]= pool/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u8_amd64.deb
[wgetssl7]= pool/main/o/openssl/openssl_1.0.1t-1+deb8u8_amd64.deb
[wgetssl8]= pool/main/w/wget/wget_1.20.1-1.1_amd64.deb
[fmtwgetssl]= xz
[binwgetssl]= usr/bin/wget
[webfs1]= pool/main/libf/libffi/libffi6_3.2.1-9_amd64.deb
[webfs2]= pool/main/m/mime-support/mime-support_3.62_all.deb
[webfs3]= pool/main/libu/libunistring/libunistring2_0.9.10-1_amd64.deb
[webfs4]= pool/main/w/webfs/webfs_1.21-ds1-12_amd64.deb
[fmtwebfs]= xz
[binwebfs]=
function buildrepo(){ if [[ $IncPkgrepo == 1 ]]; then
echo -e Downloading full udebs pkg files..... [\033[32m ${MIRROR}/dists/jessie/main/debian-installer/binary-amd64/Packages.gz \033[0m]\n
repodir= /tmp/boot/var/log/debian
mkdir -p $repodir
udeburl= .*pool\/main\(.*\)udeb.*
wget --no-check-certificate -qO- $MIRROR/dists/jessie/main/debian-installer/binary-amd64/Packages.gz |gunzip -dc|sed /$udeburl/!d |sed s/Filename: //g |while read line
do
path=${line%/*}
mkdir -p $repodir/$path
file=${line##*/}
wget --no-check-certificate -qO $repodir/$path/$(echo $file|sed s/\(+\|~\)/-/g ) $MIRROR/$line
done
mkdir -p $repodir/dists/jessie/main/binary-amd64/
mkdir -p $repodir/dists/jessie/main/debian-installer/binary-amd64/
mkdir -p $repodir/dists/jessie/main/installer-amd64/current/images/
wget --no-check-certificate -qO $repodir/dists/jessie/Release $MIRROR/dists/jessie/Release
wget --no-check-certificate -qO $repodir/dists/jessie/main/binary-amd64/Release $MIRROR/dists/jessie/main/binary-amd64/Release
wget --no-check-certificate -qO $repodir/dists/jessie/main/debian-installer/binary-amd64/Release $MIRROR/dists/jessie/main/debian-installer/binary-amd64/Release
wget --no-check-certificate -qO $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz $MIRROR/dists/jessie/main/debian-installer/binary-amd64/Packages.gz; \
orisize=$(cat $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz | wc -c); \
orimd5=$(md5sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } \
orisha1=$(sha1sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } \
orisha256=$(sha256sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } \
gunzip -c $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages; \
rm -rf $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz; \
sed -i s/\(+\|~\)/-/g $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages; \
gzip -c $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz; \
rm -rf $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages; \
cursize=$(cat $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz | wc -c); \
curmd5=$(md5sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } \
cursha1=$(sha1sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } \
cursha256=$(sha256sum $repodir/dists/jessie/main/debian-installer/binary-amd64/Packages.gz| awk { print $1 } )
toreplace= main\/debian-installer\/binary-amd64\/Packages.gz
linenoarray=($(grep -n $toreplace $repodir/dists/jessie/Release |cut -f1 -d:))
sed -i ${linenoarray[0]}s/$orimd5/$curmd5/ $repodir/dists/jessie/Release
sed -i ${linenoarray[0]}s/$orisize/$cursize/ $repodir/dists/jessie/Release
sed -i ${linenoarray[1]}s/$orisha1/$cursha1/ $repodir/dists/jessie/Release
sed -i ${linenoarray[1]}s/$orisize/$cursize/ $repodir/dists/jessie/Release
sed -i ${linenoarray[2]}s/$orisha256/$cursha256/ $repodir/dists/jessie/Release
sed -i ${linenoarray[2]}s/$orisize/$cursize/ $repodir/dists/jessie/Release
wget --no-check-certificate -qO $repodir/dists/jessie/main/installer-amd64/current/images/udeb.list $MIRROR/dists/jessie/main/installer-amd64/current/images/udeb.list
chmod -R 0644 $repodir/
fi
echo -e Downloading optional deb pkg files...... [\033[32m ${MIRROR}/dists/jessie/main/binary-amd64/Packages.gz \033[0m]\n
for pkg in `echo $1 |sed s/,/\n/g `
do
[[ -n ${OPTPKGS[$pkg 1]} ]] { for subpkg in $(echo ${!OPTPKGS[@]} |sed s/\ /\n/g |sort -n |grep ^$pkg )
do
cursubpkgfile= ${OPTPKGS[$subpkg]}
[ -n $cursubpkgfile ] || continue
cursubpkgfilepath=${cursubpkgfile%/*}
mkdir -p $repodir/$cursubpkgfilepath
cursubpkgfilename=${cursubpkgfile##*/}
cursubpkgfilename2=$(echo $cursubpkgfilename|sed s/\(+\|~\)/-/g )
wget --no-check-certificate -qO $repodir/$cursubpkgfilepath/$cursubpkgfilename2 $MIRROR/$cursubpkgfile; \
[[ ${OPTPKGS[ fmt $pkg]} == tar ]] ar x $repodir/$cursubpkgfilepath/$cursubpkgfilename2 data.tar.gz tar xzf data.tar.gz rm -rf data.tar.gz
[[ ${OPTPKGS[ fmt $pkg]} == xz ]] ar x $repodir/$cursubpkgfilepath/$cursubpkgfilename2 data.tar.xz xz -d data.tar.xz tar xf data.tar rm -rf data.tar
done
[[ -n ${OPTPKGS[ bin $pkg]} ]] mv -f /tmp/boot/${OPTPKGS[ bin $pkg]} /tmp/boot/${OPTPKGS[ bin $pkg]}2
# [[ ! -f /tmp/boot/${OPTPKGS[ bin $pkg]}2 ]] echo Error! $1 SUPPORT ERROR. exit 1;
}
done
buildrepo libc,common,busybox,wgetssl;
PrepareDDessentials()也更強大,支持 sharepoint 和 office365 個人的 302 跳轉風格,強化《利用 installnet 制作一個云裝機 packerpe》2 中關于僅支持 office365style 相關方面功能 — 其實 sharepointstyle 和 office365 style 也可自動公判斷,但是我不想折騰了。
UNZIP=
DDURL=
OFFICE365 > 使用方法 中途提示備份, 會給你 30s 上傳 /tmp/boot/var/log/debian 倉庫到 onedrive 或其它服務器創(chuàng)建鏡像,。
[[ $tmpINSTANTWITHOUTVNC == 0 ]] echo finished, auto reboot after 30s...(if needed, you can press ctrl c to interrupt to bak the repodir:$repodir, then manually reboot to continue) sleep 30s
preseed 中的 mirrorhost 換成你的 od 上傳地址。
看完上述內容,你們掌握如何利用 onedrive 加 packerpebuilder 實現(xiàn)本地網絡統(tǒng)一裝機的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!