分页: 1 / 1

[gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-08-19 14:25
jarlyyn
随着内存的白菜价,用64位系统的linux用户也越来越多了。

64 Windows的可以直接安装 32位的引用程序,而64位的linux系统由于有着完善的包管理系统,安装部分只提供32位包的私有程序,比如Adobe air .Draftsight,会略费些周折。

其实在安装了ia32-libs包之后,大部分air,draftsight这样的应用程序都是可以直接在64位系统上运行的。

所以写了个脚本,作用就是为选定DEB文件替换deb包控制文件的 系统限制,并加入ia32-libs以及ia32-libs-gtk的依赖

代码: 全选

#!/bin/bash
#Make 32 bit deb package installable in 64 bit system.
#author Jarlyyn hsu http://jarln.net
#usage: deb32toall 32bir_deb_filename
#depandment:zenity see about http://library.gnome.org/users/zenity/stable/
#depandment:mktemp to make temp unzip folder
#depandment:sed
#depandment:dpkg dpkg-deb
main()
{
  init_string
  check_depandment
  check_infile "$@"
  convert_file
}
#Output string list
init_string()
{
  outfile="%s.all.deb"
  err_nofile="No selected file."
  err_notdeb="文件必须以.deb结尾。"
  err_notexist="指定的文件 %s 不存在。"
  err_outfileexist="输出文件%s 已存在。转换终止。"
  err_unparkerr="无法展开deb包,请检查 ' %s '的文件格式。\r\n%s"
  err_makeerr="无法制作deb包,请检查 ' %s '文件及所在目录的权限。\r\n%s"
  err_ok="转换完成,输出文件为 %s 。"
  title_ok="转换完毕"
  title_inputfile="请输入您要处理的32位deb文件"
  progress_title="转换deb文件"
  progress_text="正在转换……"
  progress_unpack="解压缩DEB文件。"
  progress_unpackcontrol="解压缩控制文件"
  progress_sed="替换控制文件"
  progress_make="生成deb文件。可能会花费较长时间,请稍候……"
  progress_ok="转换完成,输出文件为 %s 。"
  progress_rm="删除临时文件"
  addition_depand=", ia32-libs, ia32-libs-gtk"
}
check_depandment()
{
  for cmd in "/usr/bin/zenity" "/bin/sed" "/bin/mktemp" "/usr/bin/dpkg" "/usr/bin/dpkg-deb"
  do
    if [ ! -e $cmd ] ;then
      echo "$cmd not found"
      exit
    fi
  done
}
err(){
  zenity --error --text="`printf "$@"`"
  exit
}
info(){
  zenity --info --title="$3" --text="`printf "$1" $2`"
}
# check input file
check_infile()
{
  infile="$@"
  if [ -z "$infile" ] ;then
    #show file dialog
    infile=`zenity --file-selection  --file-filter="*.deb" --title "$title_inputfile"`
    if [ $? != 0 ] ;then
      echo $err_nofile
      exit
    fi
  fi

  #Validate Filename
  filename=`expr match "$infile" "\(.*\)\.deb$"`
  if [ -z "$filename" ] ;then
    err "$err_notdeb"
  fi
  filename=`printf "$outfile" "$filename"`
  #find file
  if [ ! -e "$infile" ] ;then
    err "$err_notexist" "$infile"
  fi
  if [ -e "$filename" ] ;then
    err "$err_outfileexist" "$filename"
  fi
}

convert_file()
{
  tmpdir=`mktemp -d /tmp/deb32toall.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX`
  if [ ${tmpdir:0:5} != "/tmp/" -o  ! -d "$tmpdir" ] ;then
    #make sure tmpdir
    #make sure tmpdir is in /tmp/ for avoid wrong rm.
    exit
  fi
  #########convert begin###########
  (echo "10" ; echo "# $progress_unpack" ; dpgk_err=`dpkg-deb -x "$infile" "$tmpdir"`
  if [ $? != 0 ] ;then
    echo "100"
    progress_err=-1
    err "$err_unparkerr" "$infile" "$dpgk_err"
  fi
  echo "30" ; echo "# $progress_unpackcontrol" ; dpkg-deb --control "$infile" "$tmpdir/DEBIAN" > /dev/null
  echo "35" ; echo "# $progress_sed" ; sed -i "s/^\s*Architecture:\s*i386\s*$/Architecture: all/" "$tmpdir/DEBIAN/control" > /dev/null
  echo "40" ;sed -i -r "s/^\s*(Depends: .*)$/\1$addition_depand/" "$tmpdir/DEBIAN/control" > /dev/null
  echo "50" ; echo "# $progress_make" ; dpgk_err=`dpkg -b "$tmpdir" "$filename"`
  if [ $? != 0 ] ;then
    progress_err=-1
    err "$err_makeerr" "$filename" "$dpgk_err"
  fi
  echo "100";
  )|zenity --progress \
          --title="$progress_title" \
          --text="$progress_text" \
	  --auto-close\
          --percentage=0
  rm "$tmpdir" -r -f
  if [ "$?" == "-1" -o "$progress_err" == "-1" -o ! -e "$filename" ] ;then
    exit
  fi
  info "$err_ok" "$filename" "$title_ok"
  ###########convert end###########
  ###########check for gdebi gui$$$$$$
  if [ -e "/usr/bin/gdebi-gtk" ] ;then
    /usr/bin/gdebi-gtk "$filename"
  elif [ -e "/usr/bin/gdebi-kde" ] ;then
    /usr/bin/gdebi-kde "$filename"
  fi
}

main "$@"

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-08-19 14:27
jarlyyn
不能上传文件……

下次搞个google code的download链接算了

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-08-19 14:29
qy117121
压缩了就能上传了 :em11

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-08-19 14:34
jarlyyn
qy117121 写了:压缩了就能上传了 :em11
果然

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-08-19 14:34
月下叹逍遥
jarlyyn 写了:
qy117121 写了:压缩了就能上传了 :em11
果然
:em06

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-11-03 21:21
autocup
:em06 这么的东西要大力推广呀

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2011-11-14 17:27
tusooa
s/depand/depend/g

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2012-04-10 15:11
Points
这个要标记。。谢谢分享。。

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2012-12-20 23:22
barrynick
在64位的debian系统中安装说缺少libdirectfd-extra,这个问题怎么解决?

Re: [gui]debian/ubuntu下转换限定32位的deb为所有平台的脚本。

发表于 : 2013-01-26 22:04
fuhaoyun
:em11 好东西