最后修改:2011-03-30
11.3.30 修改:这里有用ruby重写的,比较方便 http://blog.vkill.net/read.php/190.htm
之所以想自己建源是因为我无法经常使用网络,且我希望如 red hat 那样有方便的DVD来安装常见软件
好了,下面是建立的思路
1。首先创建目录: community core extra
2。下载每个目录下相应的db文件,如 extra.db.tar.gz 文件
3。再下载你需要安装的包文件,如 pacman-3.1.3-1-i686.pkg.tar.gz ,或者全部下载,放到相应目录下
4。在本地架设ftp服务器
@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
::::
::自建archliunx软件仓库,生成community,core,extra目录下i686所有文件下载列表
::可比对md5生成需要更新的,都只是生成文件列表,需要用下载软件批量下载
::
:: code by:vkill 需要外部命令:wget sed ncftpls 7za md5
:: 最后修改 2009-05-01
::
::::
::set url=ftp://ftp.archlinux.org
set url=ftp://mirror.pacific.net.au/linux/archlinux
set url_down1=http://distro.ibiblio.org/pub/linux/distributions/archlinux
set str=community;core;extra
set d1=archlinux
set d2=os\i686
:1.
cls
echo 第一步:
cd.>t.txt
for %%? in (%str%) do (>>t.txt echo %%?)
findstr /N . t.txt
for /f "tokens=1,2 delims=:" %%a in ('findstr /N . t.txt') do (set/a n+=1 & set %%a=%%b)
set/p=输入你要操作的仓库目录序号:<nul
set/p x=
set d3=!%x%!
if not defined d3 goto :1.
::md %d1%\!d3!\%d2%\ >nul 2>nul
set "d2_=%d2:\=/%"
:2.
cls
echo 第二步:
cd.>t.txt
>>t.txt (
echo 生成官方服务器完整下载地址:downall
echo 只从官方下载 *.db.tar.gz 文件:downdb
echo 比对md5后只生成本次需更新的文件:downneed
)
findstr /N . t.txt
for /f "tokens=1,2,3 delims=:" %%a in ('findstr /N . t.txt') do (set/a n+=1 & set %%a=%%c)
set/p=输入操作序号:<nul
set/p x=
set caozuo=!%x%!
if not defined caozuo goto :2.
call :!caozuo!
echo 操作完成
del t.txt
pause
exit/b
::-------------all call---------------
:downall
echo 第三步:生成官方服务器完整下载地址
::如出错,sed "s,^^,%那里去掉一个^
ncftpls %url%/!d3!/!d2_!/ | sed "s,^^,%url_down1%/!d3!/!d2_!/," | more>!d3!downall.txt
goto :eof
:downdb
echo 第三步:下载 !d3!.db.tar.gz 文件中...
wget - q -N -P %d1%\!d3!\%d2%\ "%url%/!d3!/!d2_!/!d3!.db.tar.gz"
goto :eof
:downneed
echo.
echo.
echo 第三步:比对md5后只生成本次需更新的文件
md "test-0" >nul 2>nul
cd "test-0"
del /f/a/q *.* >nul 2>nul
cd.>t.txt
echo 复制和解压!d3!.db.tar.gz...
copy /y "..\%d1%\!d3!\%d2%\!d3!.db.tar.gz" >nul 2>nul
7za e !d3!.db.tar.gz >nul 2>nul
echo u|7za e !d3!.db.tar >nul 2>nul
echo 分析处理出filename和md5sum...
SETLOCAL DISABLEDELAYEDEXPANSION
for /f "tokens=*" %%? in ('dir /b desc*') do (
findstr "%%FILENAME%%" %%? >nul 2>nul && (
type %%?|sed -r -n -e "/^(%%FILENAME%%|%%MD5SUM%%)$/{n;p}"|sed -e "$!N;s/\n/;/" |more>>t.txt
) || (
type %%?|sed -r -n -e "/^(%%NAME%%|%%VERSION%%|%%MD5SUM%%)$/{n;p}"| sed -e ":loop ;$!N;s/\n/;/; t loop" |sed -r "s,^([^;]*);([^;]*);([0-9a-zA-Z]{32}),\1-\2.pkg.tar.gz;\3,;"|more>>t.txt
)
)
SETLOCAL ENABLEDELAYEDEXPANSION
echo 比较文件md5sum是否正确...
cd.>!d3!downneed.txt
set nmax=0
for /f %%? in (t.txt) do (set/a nmax+=1)
set n=0
for /f "tokens=1-2 delims=;" %%a in (t.txt) do (
set/a n+=1
set/p= [!n!/!nmax!]check md5 %%a...<nul
for /f "tokens=*" %%? in ('"md5 -n "..\%d1%\!d3!\%d2%\%%a" 2>nul ||(echo error)"') do (
if /i not ^*%%?==^*%%b (echo md5 error! & >>"../!d3!downneed.txt" echo %url_down1%/!d3!/!d2_!/%%a) else (echo md5 ok!)
)
)
findstr . "../!d3!downneed.txt" >nul 2>nul &&(echo 有文件需要更新,2秒后自动打开文件 & ping -n 3 127.1 >nul 2>nul & start "../!d3!downneed.txt")
cd..
goto :eof
注释:
官方软件仓库wiki :http://wiki.archlinux.org/index.php/%E5%AE%98%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93
[core] 包含了Arch核心软件包和其它一些软件
[extra] 包含了所有未能进入[core]的Arch软件包。在这里可以找到比较重要的软件例如KDE或者GNOME。
[community] 它被受信用户 (TUs)所维护,是Arch用户仓库(AUR)的一部分。它包含了拥有足够票数并被某位TU接纳的软件包。
Last modified by vkill on2011/03/30 15:59
11.3.30 修改:这里有用ruby重写的,比较方便 http://blog.vkill.net/read.php/190.htm
之所以想自己建源是因为我无法经常使用网络,且我希望如 red hat 那样有方便的DVD来安装常见软件
好了,下面是建立的思路
1。首先创建目录: community core extra
2。下载每个目录下相应的db文件,如 extra.db.tar.gz 文件
3。再下载你需要安装的包文件,如 pacman-3.1.3-1-i686.pkg.tar.gz ,或者全部下载,放到相应目录下
4。在本地架设ftp服务器
@echo off & SETLOCAL ENABLEDELAYEDEXPANSION
::::
::自建archliunx软件仓库,生成community,core,extra目录下i686所有文件下载列表
::可比对md5生成需要更新的,都只是生成文件列表,需要用下载软件批量下载
::
:: code by:vkill 需要外部命令:wget sed ncftpls 7za md5
:: 最后修改 2009-05-01
::
::::
::set url=ftp://ftp.archlinux.org
set url=ftp://mirror.pacific.net.au/linux/archlinux
set url_down1=http://distro.ibiblio.org/pub/linux/distributions/archlinux
set str=community;core;extra
set d1=archlinux
set d2=os\i686
:1.
cls
echo 第一步:
cd.>t.txt
for %%? in (%str%) do (>>t.txt echo %%?)
findstr /N . t.txt
for /f "tokens=1,2 delims=:" %%a in ('findstr /N . t.txt') do (set/a n+=1 & set %%a=%%b)
set/p=输入你要操作的仓库目录序号:<nul
set/p x=
set d3=!%x%!
if not defined d3 goto :1.
::md %d1%\!d3!\%d2%\ >nul 2>nul
set "d2_=%d2:\=/%"
:2.
cls
echo 第二步:
cd.>t.txt
>>t.txt (
echo 生成官方服务器完整下载地址:downall
echo 只从官方下载 *.db.tar.gz 文件:downdb
echo 比对md5后只生成本次需更新的文件:downneed
)
findstr /N . t.txt
for /f "tokens=1,2,3 delims=:" %%a in ('findstr /N . t.txt') do (set/a n+=1 & set %%a=%%c)
set/p=输入操作序号:<nul
set/p x=
set caozuo=!%x%!
if not defined caozuo goto :2.
call :!caozuo!
echo 操作完成
del t.txt
pause
exit/b
::-------------all call---------------
:downall
echo 第三步:生成官方服务器完整下载地址
::如出错,sed "s,^^,%那里去掉一个^
ncftpls %url%/!d3!/!d2_!/ | sed "s,^^,%url_down1%/!d3!/!d2_!/," | more>!d3!downall.txt
goto :eof
:downdb
echo 第三步:下载 !d3!.db.tar.gz 文件中...
wget - q -N -P %d1%\!d3!\%d2%\ "%url%/!d3!/!d2_!/!d3!.db.tar.gz"
goto :eof
:downneed
echo.
echo.
echo 第三步:比对md5后只生成本次需更新的文件
md "test-0" >nul 2>nul
cd "test-0"
del /f/a/q *.* >nul 2>nul
cd.>t.txt
echo 复制和解压!d3!.db.tar.gz...
copy /y "..\%d1%\!d3!\%d2%\!d3!.db.tar.gz" >nul 2>nul
7za e !d3!.db.tar.gz >nul 2>nul
echo u|7za e !d3!.db.tar >nul 2>nul
echo 分析处理出filename和md5sum...
SETLOCAL DISABLEDELAYEDEXPANSION
for /f "tokens=*" %%? in ('dir /b desc*') do (
findstr "%%FILENAME%%" %%? >nul 2>nul && (
type %%?|sed -r -n -e "/^(%%FILENAME%%|%%MD5SUM%%)$/{n;p}"|sed -e "$!N;s/\n/;/" |more>>t.txt
) || (
type %%?|sed -r -n -e "/^(%%NAME%%|%%VERSION%%|%%MD5SUM%%)$/{n;p}"| sed -e ":loop ;$!N;s/\n/;/; t loop" |sed -r "s,^([^;]*);([^;]*);([0-9a-zA-Z]{32}),\1-\2.pkg.tar.gz;\3,;"|more>>t.txt
)
)
SETLOCAL ENABLEDELAYEDEXPANSION
echo 比较文件md5sum是否正确...
cd.>!d3!downneed.txt
set nmax=0
for /f %%? in (t.txt) do (set/a nmax+=1)
set n=0
for /f "tokens=1-2 delims=;" %%a in (t.txt) do (
set/a n+=1
set/p= [!n!/!nmax!]check md5 %%a...<nul
for /f "tokens=*" %%? in ('"md5 -n "..\%d1%\!d3!\%d2%\%%a" 2>nul ||(echo error)"') do (
if /i not ^*%%?==^*%%b (echo md5 error! & >>"../!d3!downneed.txt" echo %url_down1%/!d3!/!d2_!/%%a) else (echo md5 ok!)
)
)
findstr . "../!d3!downneed.txt" >nul 2>nul &&(echo 有文件需要更新,2秒后自动打开文件 & ping -n 3 127.1 >nul 2>nul & start "../!d3!downneed.txt")
cd..
goto :eof
注释:
官方软件仓库wiki :http://wiki.archlinux.org/index.php/%E5%AE%98%E6%96%B9%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93
[core] 包含了Arch核心软件包和其它一些软件
[extra] 包含了所有未能进入[core]的Arch软件包。在这里可以找到比较重要的软件例如KDE或者GNOME。
[community] 它被受信用户 (TUs)所维护,是Arch用户仓库(AUR)的一部分。它包含了拥有足够票数并被某位TU接纳的软件包。
Last modified by vkill on2011/03/30 15:59
网友评论(0):


