vkill'blog

“技术本身没有太多价值,掌握了新的思考方式才是真的收获”

自建 archlinux 软件仓库(附批处理更新代码)

10:11 , vkill
最后修改: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
类别:linux system | Tags: , , , | 0 条评论, 1665 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: