用法

MIC提供三种主要功能:

  • 创建不同格式的镜像
  • 镜像格式的转换
  • chroot 到一个镜像文件中

获取帮助信息

你可以使用`$ mic --help`或者`$ mic <subcmd> --help`指令来获取帮助信息。

如何获取帮助:

  • 使用‘man’选项

    • $ man mic
  • 使用‘--help’选项
    • mic --help
    • mic create --help
    • mic help create
    • mic create loop --help
    • mic create help loop

MIC支持的镜像文件格式

  • Loop

    • 每一个loop对应着一个分区
    • 一个loop镜像文件内包含一个文件系统
    • 在一个kickstartfile文件中描述多个分区,针对这种情况,mic工具将会生成多个loop镜像文件。
    • 多个loop镜像可以打包成一个archive文件
  • Raw
    • raw格式有点像硬盘数据
    • 包含分区表和所有分区
    • 可直接启动此镜像
  • Livecd/liveusb
    • 主要用于ia32,可以将其烧录到CD或U盘
  • fs
    • fs即文件系统
    • mic工具可以安装所有的tizen文件到指定目录,此目录可直接用作chroot目录

创建镜像

基本用法

  • 创建镜像文件的指令:
   mic create(cr) SUBCOMMAND <ksfile> [OPTION]
  • 指定镜像文件格式类型的子命令,包括:
   help(?)            give detailed help on a specific sub-command
   fs                 create fs image, which is also a chroot directory
   livecd             create live CD image, used for CD booting
   liveusb            create live USB image, used for USB booting
   loop               create loop image, including multi-partitions
   raw                create raw image, containing multi-partitions
  • <ksfile>:

kickstart是一个简单的文本文件,包含镜像分区,设置,Bootloader,安装包等,每种类型都对应一个关键字。

Tizen在发布时,通常会同时发布其对应的ksfile。 例如,你可以从http://download.tizen.org/releases/daily/trunk/ivi/latest/images/ivi-min...下载ksfile文件。

  • 选项包括:
   -h, --help          Show this help message and exit
   --logfile=LOGFILE   Path of logfile
   -c CONFIG, --config=CONFIG
                       Specify config file for MIC
   -k CACHEDIR, --cachedir=CACHEDIR
                       Cache directory to store downloaded files
   -o OUTDIR, --outdir=OUTDIR
                       Output directory
   -A ARCH, --arch=ARCH
                       Specify repo architecture
   --release=RID       Generate a release of RID with all necessary files.
                       When @BUILD_ID@ is contained in a kickstart file, it
                       will be replaced by RID.
   --record-pkgs=RECORD_PKGS
                       Record the info of installed packages. Multiple values
                       can be specified which joined by ",", valid values:
                       "name", "content", "license", "vcs".
   --pkgmgr=PKGMGR     Specify backend package manager
   --local-pkgs-path=LOCAL_PKGS_PATH
                       Path for local pkgs(rpms) to be installed
   --pack-to=PACK_TO   Pack the images together into the specified achive,
                       extension supported: .zip, .tar, .tar.gz, .tar.bz2,
                       etc. by default, .tar will be used
   --copy-kernel       Copy kernel files from image /boot directory to the
                       image output directory.
   --install-pkgs=INSTALL_PKGS
                        Specify what type of packages to be installed, valid:
                        source, debuginfo, debugsource
  • 其他选项:
   --runtime=RUNTIME_MODE
                       Sets runtime mode, the default is bootstrap mode, valid
                       values: "native", "bootstrap". "native" means mic uses
                       localhost environment to create image, while "bootstrap"
                       means mic uses one tizen chroot environment to create image.
    --compress-image=COMPRESS_IMAGE (for loop & raw)
                       Sets the disk image compression. Note: The available
                       values might depend on the used filesystem type.
   --compress-disk-image=COMPRESS_IMAGE
                       Same with --compress-image
   --shrink (for loop)
                       Whether to shrink loop images to minimal size
   --generate-bmap (for raw)
                       Generate the block map file
   --fstab-entry=FSTAB_ENTRY (for raw)
                        Set fstab entry, 'name' means using device names,
                        'uuid' means using filesystem uuid
  • 示例:

    • 创建一个loop镜像
   mic cr loop tizen.ks

如何创建一个镜像文件

  • 准备kickstart文件

创建镜像文件之前,你需要准备一个ksfile文件。

这里是一个简单的例子:

# filename: tizen-min.ks
lang en_US.UTF-8
keyboard us
timezone --utc America/Los_Angeles

part / --size 1824 --ondisk sda --fstype=ext3

rootpw tizen
bootloader  --timeout=0  --append="rootdelay=5"

desktop --autologinuser=tizen
user --name tizen  --groups audio,video --password 'tizen'

repo --name=Tizen-base --baseurl=http://download.tizen.org/snapshots/trunk/common/latest/repos/base/ia32/packages/
repo --name=Tizen-main --baseurl=http://download.tizen.org/snapshots/trunk/common/latest/repos/main/ia32/packages/

%packages --ignoremissing
@tizen-bootstrap
%end

%post
rm -rf /var/lib/rpm/__db*
rpm --rebuilddb
%end

%post --nochroot
%end

上述的ks文件可以用来创建一个最小的Tizen镜像。 至于其他仓库,你可以使用网上精确的仓库地址来替换它。

例如:

 repo --name=REPO-NAME --baseurl=https://username:passwd@yourrepo.com/ia32/packages/ --save  --ssl_verify=no
  • 创建loop镜像

在终端运行MIC指令创建一个loop镜像:

   $ sudo mic create loop tizen-min.ks

使用本地RPM安装包创建镜像

“如何将我的rpm包安装到镜像中,从而可以使用该镜像测试我的rpm包?”

在这种情况下,使用本地的包路径会非常有用。 例如,如果你的hello.rpm包在本地目录‘localpath’下,运行如下指令:

   $ sudo mic create loop test.ks --local-pkgs-path=localpath

从输出信息可以看到,MIC工具会告诉你hello.rpm已经被标志为已安装,MIC会将hello.rpm安装到镜像中。 你必须得确保你的RPM包没在ks文件的repo中,并且你的rpm包版本不低于repo中rpm包的版本。

创建特定achive格式的镜像

MIC工具可以指定即将创建的镜像文件的achive格式,如 .zip, .tar, .tar.gz, .tar.bz2等。
默认情况下为.tar格式。

   $ sudo mic create loop test.ks --pack-to=@NAME@.tar.gz

Chroot

此指令用来chroot到镜像文件中。 它是Linux系统下chroot指令的增强版。

  • 用法:
   mic chroot(ch) <imgfile>
  • 选项:
   -h, --help          Show this help message and exit
   -s SAVETO, --saveto=SAVETO
                       Save the unpacked image to a specified dir
  • 示例:
   mic ch loop.img
   mic ch tizen.iso
   mic ch -s tizenfs tizen.usbimg

Convert

此指令用来将镜像文件从一种格式转换成另一个格式.

  • 用法:
   mic convert(cv) <imagefile> <destformat>
  • 选项:
   -h, --help   Show this help message and exit
   -S, --shell  Launch shell before packaging the converted image
  • 示例:
   mic cv tizen.iso liveusb
   mic cv tizen.usbimg livecd
   mic cv --shell tizen.iso liveusb

如何设置代理服务器

  • bash中的代理变量

在bash中使用代理变量是很常规的做法。 一般来说,你可以设置以下环境变量来启用代理变量:

   export http_proxy=http://proxy.com:port
   export https_proxy=http://proxy.com:port
   export ftp_proxy=http://proxy.com:port
   export no_proxy=localhost,127.0.0.0/8,.company.com

你并不需要所有的变量。 检查哪些是你需要的。 在ks文件中以‘https’开头的repo地址,MIC将使用代理变量https_proxy。 要特别注意的是当你设定no_proxy变量时,它表明哪些域名应该被直接访问。 在字符串中不要留下任何空格。

使用MIC工具需要sudo的权限,所以要保持代理环境,你需要在‘/etc/sudoers’文件中来添加这些代理变量到”env_keep“:

   Defaults        env_keep += "http_proxy https_proxy ftp_proxy no_proxy"

注意:使用“visudo“命令修改/etc/sudoers文件

如果你不想改变你的/etc/sudoers文件,你可以在mic.conf文件里设置代理。 请参阅下一节。

  • mic.conf文件中的代理设置

代理服务器的环境变量可能会干扰其他程序,所以如果你只想开启针对MIC工具的代理支持,你可以在/etc/mic/mic.conf文件中作如下设置:

   [create]
   ; settings for create subcommand
   tmpdir= /var/tmp/mic
   cachedir= /var/tmp/mic/cache
   outdir= .
   pkgmgr = zypp
   proxy = http://proxy.yourcompany.com:8080/
   no_proxy = localhost,127.0.0.0/8,.yourcompany.com
  • ks文件中的代理设置

很可能,你只需要为一个特定的repo网络地址使能代理服务,而其他的代理设置保持不变。

以下是如何处理这种情况:

   repo --name=oss --baseurl=http://www.example.com/repos/oss/packages/ --proxy=http://host:port