Image Creation(mic2)

    技术2022-06-28  67

    Image Creation

    pagediscussionview sourcehistory

    Contents

      [hide] 1 Overview2 Features3 Usage 3.1 Requirements 3.1.1 Installing requirements for Ubuntu 10.04 3.2 Installation 3.2.1 Binary Package installation3.2.2 From Stable Git Source Releases3.2.3 From Development Git Tree 3.3 Running mic-image-creator 3.3.1 Creating Supported Image Types3.3.2 KickStart Files (configuration files used for image creation) 3.3.2.1 Official Meego .ks files3.3.2.2 Modifying your .ks3.3.2.3 Proxy settings for the repos in .ks 3.3.3 MIC2 Configuration file3.3.4 Use Bootstrap 3.4 Running mic-image-writer3.5 Running mic-image-convertor3.6 Running mic-chroot3.7 Enabling Autoinstallation 4 Known issues5 Troubleshooting 5.1 libgcc related issues5.2 General squashfs issues5.3 device-mapper issues5.4 python related issues5.5 debian-based distros related issues5.6 ARM related issues5.7 Proxy cache 6 Advanced Hacking Tips 6.1 replace kernel in live image6.2 build btrfs image

    Overview

    This is the main Image Creator developer's guide. For a more simplistic, step-by-step document, go to: Image Creation For Beginners.

    The tool used to create MeeGo images is something called "MIC2" (for distinguishing from obsolete MIC - Moblin Image Creator). MIC is composed of a series of tools to create images, convert images and do some development work on MeeGo. MIC2 is based primarily on Fedora livecd-tools and appliance-tools.

    With MIC2 tools, users can create different types of images for different purposes, including live CD images, live USB images, raw images for KVM, VMDK images for Vmware, vdi images for VirtualBox, loop images for IVI platforms, NAND images for Moorestown platforms, ubi images for N900, fs image for MeeGo developers. Also, users can use MIC2 tools to manipulate images like transforming an image from a virtual machine to a live image, and providing a chroot environment based on an existing live image. With these features, developers can do development work on a host virtual machine running MeeGo or a Meego chroot environment, and transfer the resulting new live image to a target device for final debug/verification.

    This document discusses only features, usage guide, and known issues.

    Features

    MIC2 offers these major tools:

    mic-image-creator: create images.mic-image-convertor: convert a raw/vmdk/vdi/live image into a live image.mic-chroot: provide a MeeGo environment from a live/loop image for development, it also can translate that chroot file system into a live image.mic-image-writer: write a MeeGo image to a USB disk. This is a safe alternative to dd.

    The following support is provided:

    Supports mainstream Linux distros. MIC2 has been thoroughly tested on these distributions: MeegoFedora (Fedora 10 and above)Opensuse (> OpenSUSE 11.1)and Ubuntu > 9.04 Supports various types of images: livecd, liveusb, loop, raw, vmdk, nandmrst, vdi, fs, ubiSupports image coversion from virtual machine/live images to live images.Uses kickstart (.ks) files for image creation. Through this, users can specify which software repositories to use, which packages to install and basic system configuration directives. Please refer to http://fedoraproject.org/wiki/Anaconda/Kickstartfor more information about kickstart configuration files.

    Usage

    Requirements

    To be able to use MIC2, your host machine to run mic2 must have Intel(r) Atom(tm) or Intel(r) Core(tm) 2 CPU (support for SSSE3), this is a hard requirement (ARM image is exceptional), the following packages must be available on your system. (Most of the packages are installed by default, depending on the distribution.):

    yumrpmkpartxpartedsyslinuxisomd5sumkvmzlib-devel(for compiling)python-devel(for installation)

    You should load these modules as well, if not loaded automatically by the kernel: (Use lsmod to list modules.)

    squashfssquashfs-toolsdm_snapshotloop

    Specific packages for Fedora:

    pykickstartdevice-mapper

    Specific packages for Ubuntu 8.10:

    python-celementtreepython-elementtreedmsetup

    Installing requirements for Ubuntu 10.04

    sudo apt-get install yum rpm kpartx parted syslinux isomd5sum kvm zlib1g-dev squashfs-tools python2.6-dev qemu-arm-static

    Installation

    We currently build MIC2 binary rpms/debs for many popular Linux distributions, including Fedora 11, Fedora 12, Ubuntu 9.10, Ubuntu 10.04, OpenSUSE 11.1, OpenSUSE 11.2, and Debian 5.0. Please go to http://repo.meego.com/tools/repos/ to get a repository URL corresponding to your Linux distribution, then add it into your repo or package source for installation and update later. If your distribution isn't in the support list, please install MIC2 from git source.

    Binary Package installation

    Installation Steps For Fedora 11, Fedora 12 and Fedora 13

    1. Add MIC2 repo as user root:

    # cat <<REPO > /etc/yum.repos.d/meego-tools.repo [meego-tools] name=MeeGo Tools for Fedora baseurl=http://repo.meego.com/MeeGo/tools/repos/fedora//$releasever enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-meego REPO

    2. Add gpg key as user root:

    # gpg2 --keyserver subkeys.pgp.net --recv 0BC7BEC479FC1F8A # gpg2 --export --armor 0BC7BEC479FC1F8A > /etc/pki/rpm-gpg/RPM-GPG-KEY-meego

    3. Install mic2 as user root:

    # yum install mic2

    if you get asked to import the key do so:

    warning: rpmts_HdrFromFdno: Header V3 DSA/SHA1 Signature, key ID 79fc1f8a: NOKEY meego-fedora/gpgkey | 3.3 kB 00:00 ... Importing GPG key 0x79FC1F8A: Userid: "Moblin Build (Moblin Build User) <build@moblin.org>" From  : /etc/pki/rpm-gpg/RPM-GPG-KEY-meego Is this ok [y/N]: y Update Steps For Fedora 11, Fedora 12 and Fedora 13

    You can use the below command to get the latest mic2 package.

    # yum update mic2 Installation Steps For Ubuntu 9.10, Ubuntu 10.04 and Debian 5.0

    1. Add package source

    For Ubuntu 9.10, add the below line to /etc/apt/sources.list

    deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/9.10/ /

    For Ubuntu 10.04, add the below line to /etc/apt/sources.list

    deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.04/ /

    For Ubuntu 10.10, add the below line to /etc/apt/sources.list

    deb http://repo.meego.com/MeeGo/tools/repos/ubuntu/10.10/ /

    For Debian 5.0, add the below line to /etc/apt/sources.list

    deb http://repo.meego.com/MeeGo/tools/repos/debian/5.0/ /

    mic2 is also available in Debian Testing which will become Debian 6.0.

    2. sudo apt-get update

    You should see the following error: W: GPG error: http://repo.meego.com Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0BC7BEC479FC1F8A

    To add the repository public key use the following command:

    gpg --keyserver subkeys.pgp.net --recv 0BC7BEC479FC1F8A gpg --export --armor 0BC7BEC479FC1F8A | sudo apt-key add -

    Now redo sudo apt-get update

    3. sudo apt-get install mic2

    Installation Steps For OpenSUSE 11.1, OpenSUSE 11.2 and OpenSUSE 11.3

    1. Add repos

    For OpenSUSE 11.1:

    sudo zypper addrepo http://repo.meego.com/MeeGo/tools/repos/opensuse/11.1/ meego-tools

    For OpenSUSE 11.2:

    sudo zypper addrepo http://repo.meego.com/MeeGo/tools/repos/opensuse/11.2/ meego-tools

    For OpenSUSE 11.3:

    sudo zypper addrepo http://repo.meego.com/MeeGo/tools/repos/opensuse/11.3/ meego-tools

    2. sudo zypper install mic2

    Update Steps For OpenSUSE 11.1, OpenSUSE 11.2 and OpenSUSE 11.3 sudo zypper update mic2

    From Stable Git Source Releases

    You can get the latest stable release of MIC2 from the tag section in http://meego.gitorious.org/meego-developer-tools/image-creator. Click on the "Source tree" link on the top of the screen. There will be a list of tags on the right hand side.

    You should follow the below steps to install it:

    git clone git://gitorious.org/meego-developer-tools/image-creator.git cd image-creator git checkout 0.17 #check Gitorious for the most recent tag make sudo make install

     

    From Development Git Tree

    Note: MIC2 GIT tree has latest-and-greatest source, so stability is not guaranteed. If you run into errors, please use a 'Stable Release' instead before filing a bug.

    You need to follow the below steps to git clone MIC2:

    git clone git://gitorious.org/meego-developer-tools/image-creator.git

    Build and install:

    cd image-creator make clean make sudo make install

    You should add the repo for mic2 then run

    sudo ./tools/mic-check-alldeps

    to check/install all the depended packages, otherwise mic2 can't work normally.

    Running mic-image-creator

    Configuration of images is based on kickstart, the format used for unattended installation in Fedora and Redhat.

    Super user privileges are needed. The tool is more or less self-documented, use the --help option to see options.

    sudo mic-image-creator --help

    Creating Supported Image Types

    KickStart (.ks) configuration files are passed to MIC2 to create tailored images. KickStart files specify what repos to pull from, what packages to include, what post-scripts to run and what type of images to create.

    To obtain the official Meego .ks files, go here: TO-DO-LINK

    Create ARMv7 Images

    When creating images for ARMv7 hardware, pass --arch=armv7l to mic-image-creator commands.

    Create Livecd Image

    sudo mic-image-creator --config=default.ks --format=livecd --cache=mycache

    This tells image-creator to use the kickstart file default.ks to obtain info about which packages to download and include in the image, and --cache is the directory on your local machine which will host a cache of these packages. The cache is very useful if you are remote to the server and reduces the amount of downloaded packages next time you create an image. Next time the command is run, this cache will simply be 'updated' if there are changes, rather than re-downloading from the repositories again.

    The output of this command will be a file named meego-1.0-default-XX.iso created. This ISO image is a hybrid image and can be either written to a disk device or burned onto a cd.

    To burn it onto a USB stick, just run the following command, assuming the USB stick is /dev/sdb in your system:

    sudo mic-image-writer meego-1.0-default-XX.iso

    Create Moorestown NAND Image

    sudo mic-image-creator --config=default.ks --format=mrstnand remove the first 512 bytes from the image to remove the partition information. sudo dd bs=512 skip=1 if=meego-1.0-default-XX-sda.bin of= meego-1.0-default-XX-nand.img

    Create Liveusb Image

    sudo mic-image-creator --config=default.ks --format=liveusb --cache=mycache

    A file named meego-1.0-default-XX.usbimg will be created. To burn it onto a USB stick, run the following command, assuming the USB stick is /dev/sdb in your system:

    sudo mic-image-writer meego-1.0-default-XX.usbimg

    This image has a FAT file system and can be mounted easily on Windows and other OSes.

    Create Liveusb Image Interactively

    sudo mic-image-creator --config=default.ks --format=liveusb --interactive --cache=mycache

    It directly creates a MeeGo live usb stick.

    Liveusb image can be created in two different ways, interactive and non-interactive (default). When running MIC2 in a non-interactive mode, MIC2 creates a USB images file that can be copied directly into a USB stick. The non-interactive mode can be used for daily build or automated testing. The interactive mode will write the images onto a USB disk, it will detect if a USB stick is available and detects and verifies a partition is available. If two or more USB devices are present, you will be asked to select the target device. This way the contents of the existing USB stick won't be destroyed unless no appropriate partition is found, end user should use it to create the live USB.

    Create Loop Image

    This is the simplest image format available. Such images can be loop mounted and chrooted into, for example, to build applications or for debugging purposes.

    sudo mic-image-creator --config=default.ks --format=loop --cache=mycache

    A file named meego-1.0-default-XX.img is created. You can use below to mount it and chroot into it.

    sudo mount -o loop meego-1.0-default-XX.img /mnt sudo chroot /mnt su -

    Create KVM Image

    Can be used with QEMU or other VMM applications to launch MeeGo as a virtualized instance.

    sudo mic-image-creator --config=default.ks --format=raw --cache=mycache

    A file named meego-1.0-default-XX folder with a meego-1.0-default-XX-sda.raw image is created. For optimal results, use this feature in a machine with VT support and enable it in the BIOS.

    If you use Fedora or openSUSE, run the following command to launch the image into MeeGo KVM virtual machine:

    sudo qemu-kvm -m 512 -boot c -hda meego-1.0-default-XX-sda.raw -std-vga

    If you use Ubuntu, run the following command launch image:

    sudo kvm -m 512 -boot c -hda meego-1.0-default-XX-sda.raw

    Create VMDK Image

    VMDK images can be loaded into Vmware or Vmware player. MIC2 also generates a VMX file that has image configuration and can be used to launch the image in Vmware by just clicking the file. If you have vmplayer, it should open automatically.

    sudo mic-image-creator --config=default.ks --format=vmdk --cache=mycache

    A file named meego-1.0-default-XX folder with both meego-1.0-default-XX-sda.vmdk image and meego-1.0-default-XX-sda.vmx is created. Just run vmware or vmware player, and select the generated vmx file.

    KickStart Files (configuration files used for image creation)

    KickStart (.ks) configuration files are passed to MIC2 to create tailored images. KickStart files specify what repos to pull from, what packages to include, what post-scripts to run and what type of images to create.

    For more details about the kickstart format, see http://fedoraproject.org/wiki/Anaconda/Kickstart.

    Note that not all KickStart directives and options are supported for creating Meego images. MIC2 also adds some specific directives and options. More explained below.

    Official Meego .ks files

    The official Meego .ks files are here:

    For ARM based Nokia N900: http://repo.meego.com/MeeGo/builds/trunk/ <version>/handset/images/meego-handset-armv7l-n900/For Intel Atom based netbook and handset (Moorestown): http://repo.meego.com/MeeGo/builds/trunk/<version>/{netbook,handset,ivi}/images/<respective directory>/

    You can download and use them as a base for the Meego images you create. Modify these .ks files as you wish to create tailored images.

    Modifying your .ks

    Developers may want to modify the .ks files to create their own custom images. Here are the main options and sections within the .ks file.

    You can also find in-depth .ks option information here:http://fedoraproject.org/wiki/Anaconda/Kickstart#Chapter_2._Kickstart_Options

    Partition, Setup and Bootloader options

    Example

    lang en_US.UTF-8 keyboard us timezone --utc America/New_York auth --useshadow --enablemd5 part / --size 1500 --ondisk sda --fstype=ext3 rootpw meego xconfig --startxonboot bootloader --timeout=0 --append="quiet" desktop --autologinuser=meego --defaultdesktop=xfce user --name meego --groups audio,video --password meego

    These are mostly self-explanatory and set up important things such as partition size, filesystem type, kernel paramters, etc. You can change these depending on what your needs are.

    Repos

    This is where you can specify the yum repositories that you want MIC2 to search and pull your packages from which to make up your image. You can add official Meego repos, other remote repos, or your own local repos on your dev machine.

    Example

    # This is a comment # My first repo repo --name=trunk --baseurl=http://mytrunk.myrepo.com # My second repo #repo --name=<repo-name-2> --baseurl=< url | local-repo-dir >

    NOTE: --name of the repo can be any unique alphanumeric name you give your repo, it can be anything. Just make sure you don't use the same name twice for any of the listed repos, remember they have to be unique.

    To create a repo you can point to on your local developer machine, you can run the following command:

    createrepo -d <local-dir>

    Where 'local-dir' is a local directory on your machine that contains the rpms you want include in your local directory.

    Adding Packages and Package Groups

    Example

    %packages # Example adding pkg groups @Core @X for Netbooks @Base @Development Tools @<my-PkgGroup1> @<my-PkgGroup2> # Example adding individual pkgs kernel-netbook xorg-x11-server-Xorg-setuid carrick xorg-x11-drv-evtouch <my-pkg-1> <my-pkg-2> %end

    This specifies exactly what packages will be included in your image. Package groups can be specified with a "@" preceding it, as you can see from the examples above. Package groups are defined in the 'repodata' section of a repo, under a 'comps*.xml' file. Defined therein are package group names, and what packages are included in each package group. The Meego package groups are standard, and cannot be changed. You can, however, define your own package groups in your own non-Meego repos if you are using those.

    Please see here for more info on defining package groups in repositories: TO-DO-LINK

    You can also add individual package names to be included in the image as you can see from the second part in the above example.

    Important Note about how MIC2 picks a package when different versions are available

    A common problem is that, let's say, a packageA has more than one version residing in a repo(s) that your .ks is pointing to.

    How will the MIC2 know which one to pick?

    Example

    There exists in the repo(s) these different versions of PackageA:

    PackageA-1.0

    PackageA-2.0

    PackageA-3.0

    MIC2 will pick the PackageA with the highest version number (PackageA-3.0 in this case).

    There is one way to get around that, and that is to set the 'Epoch' version within a package .spec file.

    Example (works in both .spec and .yaml file) Name: <name> Summary: <summary> Epoch: 1 Version: <version>

    MIC2 will first look to compare the 'Epoch' version of the packages. All Meego official packages do not include an 'Epoch' version, so if you set the 'Epoch' number within your .spec file to any positive integer, no matter if your package version is smaller, MIC2 will choose your package.

    So back to our example.

    Example

    PackageA-1.0 (Epoch not set)

    PackageA-2.0 (Epoch = 1)

    PackageA-3.0 (Epoch not set)

    MIC2 will choose PackageA-2.0 in this case. And it follow that:

    Example

    PackageA-1.0 (Epoch=100)

    PackageA-2.0 (Epoch = 1)

    PackageA-3.0 (Epoch not set)

    MIC2 will choose PackageA-1.0.

    Remember that Meego packages will not have 'Epoch' set, so chances are that if you set 'Epoch' in your own package to any positive integer, it will be the one MIC2 chooses to pull down and include in an image.

    Removing Packages

    If you would like to make sure that a pkg is _not_ included, you can specify that with a '-' preceding the package name.

    Example

    %packages # Example pkg groups @Core # Example adding individual pkgs kernel-netbook # Example removing individual pkgs -carrick -package-xyz %end

    with the above example, packages 'carrick' and 'package-xyz' will _not_ be included in the image.

    Note: all packages that depend on the package you want to remove should also be removed, or else MIC2 will ignore your request to remove that package from an image. For example, if 'carrick' depends on 'package-xyz', and you specified only to remove 'package-xyz', and keep carrick, MIC2 will ignore the request to remove package-xyz (since carrick depends on it), and it includes both of these pgks in the image.

    Post scripts

    You can also specify post-scripts to be run after the image is installed.

    Example

    %post # Example - saving some space rm -f /boot/initrd* rm -f /core* # Example - Install working xorg.conf if [ -f /usr/share/my.conf ]; then cp /usr/share/my.conf /etc/X11/xorg.conf fi # Example - Tell alsa the correct audio card to use for your platform echo -e "options snd-hda-intel index=0/noptions snd-timbi2s index=1" > /etc/modp robe.d/alsa.conf %end

    Proxy settings for the repos in .ks

    An option you might find useful if you're behind a firewall is the --proxy flag for the "repo" definition. You can specify it in the .ks as follows:

    repo --name=meego --baseurl=http://repo.meego.com/trunk/repo/ia32/os/ --proxy=http://proxyhost:proxyport/ --proxyuser=proxyusername

    --proxypaswd=proxyuserpassword

    If you are behind a firewall, you don't need to set proxyuser and proxypasswd, like:

    repo --name=meego --baseurl=http://repo.meego.com/trunk/repo/ia32/os/ --proxy=http://proxyhost:proxyport

    Note: You can also insert this in your sudoers config:

    $ sudo visudo Add: Defaults env_keep += " no_proxy http_proxy ........."

    so sudo will adhere to the no_proxy and proxy settings.

    MIC2 Configuration file

    MIC2 options can be specified in a global configuration file (/etc/mic2/mic2.conf) and local configuration file ($HOME/.mic2.conf) where you can specify

    Repository configurationproxy settingscache directories andother variables

    that you normally would have to re-type in your command-line.

    The two configuration files have the same format, /etc/mic2/mic2.conf is global, no matter whoever is running MIC2, this configuration file will be read first, $HOME/.mic2.conf is just valid for current user, every user can have their own settings. The final configuration is a combination of two configuration files, options in $HOME/.mic2.conf will override those from/etc/mic2/mic2.conf. Options from command line have the highest priority. If an option is specified on the command line, the same option in both configuration files, global and local will be ignored.

    Below is an example you can cut-and-paste, and reuse for your needs:

    [main] cachedir=/home/user1/mycache tmpdir=/home/user1/mystorage/tmp outdir=/home/user1/mystorage proxy=http://my.proxy.com:911/ no_proxy=localhost,127.0.0.0/8,.mysite.com,172.16.0.0/16

    cachedir = directory where the cached repo(s) will reside. With this variable set, you do not need to pass the --cache flag in the command-line.

    tmpdir = temporary directory used by MIC2 when creating images. With this variable set, you do not need to pass the --tmpdir flag in the command-line.

    outdir = where your images will reside once they are created. With this variable set, you do not need to pass the --outdir flag in the command-line.

    proxy = specify your proxy if you're behind a behind a firewall.

    no_proxy = specify what domains should not sure the proxy setting.

    image_format = specify image format.

    default_ks = specify a default kickstart file, there are several kickstart files provided in repositoryhttp://repo.meego.com/MeeGo/devel/trunk/repo/ia32/os/

    Note: When specifying proxy and no_proxy, you do not need to use the --proxy flag in your .ks files when referring to repos.

    In configuration files, you also can specify one or multiple repositories, for example:

    [trunk] name=trunk baseurl=http://repo.meego.com/MeeGo/devel/trunk/repo/ia32/os/ enabled=1

    Once there is this repository info in your configuration files, and both image_format and default_ks are set, you can just run "sudo mic-image-creator" to create a image, there isn't any extra argument needed.

    Use Bootstrap

    MIC2 highly depends on yum and librpm, but different Linux distributions used diffrent yum and librpm versions, so MIC2 has some compatibility issues on OpenSUSE, Ubuntu and Debian, bootstrap is just for fixing these compatibility issues.

    bootstrap is a minimal MeeGo file system, MIC2 can run very smoothly on it using chroot mode. You can use the below command to create a bootstrap:

    sudo mic-create-bootstrap -n trunk -k /your/repo/cache/path -r http://repo.meego.com/MeeGo/devel/trunk/repo/ia32/os/ -o /your/final/bootstrap

    -n is used to specify repository name, if you have its cache before, it can reduce runtime dramatically to use it with -k option, -k is used to specify your repository cache dir, -r is used to specify MeeGo main repository.

    Once you created your bootstrap, you can use this bootstrap to run MIC2 as follows

    sudo mic-image-creator --bootstrap=/your/final/bootstrap --format=livecd --config=default.ks --cache=/your/repo/cache/path

    Alternatively, you can create and use bootstrap in one mic-image-creator run as follows

    sudo mic-image-creator --build-bootstrap --bootstrap=/your/final/bootstrap --format=livecd --config=default.ks --cache=/your/repo/cache/path

    Running mic-image-writer

    mic-image-writer writes a Meego image to a USB disk as an alternative to dd.

    mic-image-writer can run in both console mode and GUI mode. It can decide which mode to run, according to current system environment. You can also use a given option to force it to run in some other mode. Run 'mic-image-writer --help' to get usage information:

    Usage: mic-image-writer [options] [image file] Options: -h, --help Show this help message and exit -c, --console Run in console mode -g, --gui Run in GUI mod

    Here is a run example in console mode:

    $ sudo mic-image-writer meego-xxx.img Available usb disk: [1] /dev/sdc: SanDisk USB Flash Drive [2] /dev/sdb: SanDisk U3 Cruzer Micro Please choice [1..2] ? 2 Source: /myhome/meego-xxx.img Target: /dev/sdb Image size: 559 MB Estimated time: 55 seconds Elapsed time: 64, progress: 100% 8944+0 records in 8944+0 records out 586153984 bytes (586 MB) copied, 63.0486 s, 9.3 MB/s

    mic-image-writer can estimate how long it will take to write the given image to your USB disk and reports current writing progress. It automatically unmounts your USB disk, if it is mounted. If your USB can't be unmounted, it will terminate.

    If you love UI mode, you can run it in X enviroment. The command with the added -g flag:

    sudo mic-image-writer -g meego-xxx.img

    Image name is optional.

    Running mic-image-convertor

    It's very easy to use:

    sudo mic-image-convertor --source-image=InputImage --target-format=Targegformat sudo mic-image-convertor -I InputImage -T Targegformat

    For example, to translate a KVM raw image to livecd image, just type:

    sudo mic-image-convertor --source-image=meego-core-200902200545/meego-core-200902200545-sda.raw --target-format=livecd

    A new livecd image of meego-converted-from-raw-200902201804.iso is generated. The tool can detect the type of input image, either raw or vmdk.

    This tool is very useful. For example, the developer can launch a virtual machine running MeeGo v2 and make whatever changes on the virtual system like yum install/remove a package, scp a source tarball to VM and build and try, and etc. Then with a simple "sync" or shutdown of VM, the VM image now contains his changes. With this tool, the VM image can be transformed to a live image and burned to a USB flash disk. Now developers can have final verifications in a target device, with changes in the live system.

    Running mic-chroot

    There are two major usage models for mic-chroot for developers.

    chroot directly into the image to use it as a development environment, then optionally create a new image based off of your changes

    sudo mic-chroot -c livecd meego-core-200903131337.iso

    The above command would present a chroot, using the livecd image, to developers with some bind mounts like /proc /sys /dev/pts and /parentroot. With those bind mounts, developers now can easily exchange files in chroot env with host /parentroot, and conduct yum install, yum remove and any other network related operations. After done and typing "exit", a new live ISO image is created from the chroot env with the changes developers made.

    Unpack and modify the image's filesystem (which you can save), and create a new image based off of your changes

    Sometimes developers want to keep the chroot env so that they can do multiple changes in that root file system at different times. So they want to execute following:

    sudo mic-chroot -s my-chroot-fs --unpack-only meego-core-200903131337.iso --bind-mounts=/proc:/proc;/:/parentroot;/sys:/sys;/dev/pts:/dev/pts

    The above command creates a folder called 'my-chroot-fs' in the current directory, using the chroot environment from the livecd image. Of course if one forgets to add the --bind-mounts options, you'll need to manually do the bind mounting yourself. Don't forget copying /etc/reslov.conf into my-chroot-fs if you need to use DNS. Should you wish to create an image from the chroot, just execute following to create a livecd image

    sudo mic-chroot -c livecd --convert-only my-chroot-fs/

    Enabling Autoinstallation

    You need to copy a kickstart file into /root/mic2-ks.cfg which is used for automated installation of the image. To activate autoinstall mode, boot with autoinst on the command line or add --menus=autoinst to the bootloader directive in the kickstart file you use to create the image.

    Known issues

    MIC2 is not compatible with Ubuntu 8.04 (Yum package compatibility)MIC2 is not compatible with the initial Ubuntu 9.04. Make sure you have package libsqlite3-0 of 3.6.10-1ubuntu0.2 or later.MIC2 has some issues on Debian, please refer to MIC on Debian to get installation instructions

    Troubleshooting

    You can file a bug on http://bugzilla.meego.com/enter_bug.cgi?product=Development Tools (Note: you should select MIC for component) if you run into any MIC2-related issue, bugzilla can track your issue faster and more efficiently.

    libgcc related issues

    libgcc_s.so.1 must be installed for pthread_cancel to work" "Error: failed to create image : '/sbin/mksquashfs /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin.img' exited with error (-6)

    This error occurs when MIC2 is unable to find the proper version of libgcc. This usually happens on x86_64 systems - MIC2 is looking for the 32 bit version of libgcc, but only the 64 bit version is installed. Installing the 32 bit version of libgcc should resolve this.

    General squashfs issues

    "Error: failed to create image : '/sbin/mksquashfs /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin /var/tmp/imgcreate-FKCSsk/iso-u8xCPh/LiveOS/osmin.img' exited with error (-6)

    This error can also be an issue with the syslinux package. Try updating to the latest version for your distro.

    device-mapper issues

    unable to remove open device

    This is a race condition with device-mapper in Fedora: https://bugzilla.redhat.com/show_bug.cgi?id=506644. Usually rerunning the MIC2 command will resolve this.

    python related issues

    from urlgrabber.grabber import URLGrabber ImportError: No module named urlgrabber.grabber

    Some people are using python they built themselves, so some python modules aren't under their python library path. For such error, only one way is not to use your own python but to use python your system installed.

    debian-based distros related issues

    On debian-based distros, we used pycentral to package mic2, but mic2 source installtion used distutils, so two kinds of installation have different installation path, if they exist there at the same time, it will result in some unpredictable errors to run mic2. In order to run it correctly, you can only keep just one installation, source or binary.

    Remove binary installation

    sudo apt-get remove mic2

    Remove source installation

    Get python lib path

    $ python Python 2.5.2 (r252:60911, Sep 30 2008, 15:41:38) [GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import distutils.sysconfig >>> print distutils.sysconfig.get_python_lib() <PYTHONLIBPATH> >>> $

    Remove mic2 files

    $ sudo rm -rf <PYTHONLIBPATH>/mic $ sudo rm -rf <PYTHONLIBPATH>/mic-0.* $ sudo rm -f /usr/bin/mic $ sudo rm -f /usr/bin/mic-* $ sudo rm -f /usr/bin/moblin-*

    Note: You must replace <PYTHONLIBPATH> with the above python lib path

     

    ARM related issues

    Traceback (most recent call last): File "/usr/bin/mic-image-creator", line 856, in <module> ret = main() File "/usr/bin/mic-image-creator", line 682, in main run_in_bootstrap(options.bootstrap, argv, bindmounts, arch = options.arch) File "/usr/bin/mic-image-creator", line 261, in run_in_bootstrap ret = subprocess.call(args, preexec_fn = chroot_bootstrap) File "/usr/lib/python2.5/subprocess.py", line 444, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.5/subprocess.py", line 594, in __init__ errread, errwrite) File "/usr/lib/python2.5/subprocess.py", line 1149, in _execute_child raise child_exception OSError: [Errno 8] Exec format error

    This error occues when trying to build ARM images without passing --arch=armv7l to meego-image-creator.

    Proxy cache

    See http://bugs.meego.com/show_bug.cgi?id=2343

    Some servers (e.g. with squid as a proxy) may cache more aggressively than others, and as a result repomd.xml is invalid (old copy) and references out of date metadata files (primary, comps, filelists, etc). This is because the server is returning a cached/old copy of repomd.xml.

    Proxy cache should be disabled in mic and yum.

    Advanced Hacking Tips

    replace kernel in live image

    $sudo mic-image-convertor --source-image=<your-netbook.img> --target-format=livecd --shell

    This command will give you a chroot environment of MeeGo, you can follow the below steps to replace the default kernel with a new one.

    1). remove the old kernel

    # rpm -e kernel-netbook

    NOTE: execute the above command in chroot environment.

    2). copy new kernel to chroot environment of MeeGo

    $sudo cp /path/to/kernel-*.rpm /var/tmp/imgcreate-*/install_root/

    NOTE: execute the above command in your host system.

    /path/to/kernel-*.rpm is your new kernel to install, /var/tmp/imgcreate-*/install_root/ is the directory where chroot MeeGo mounted on.

    3). install the new kernel

    # rpm -ivh /kernel-*.rpm # rm /kernel-*.rpm

    NOTE: execute the above command in chroot environment.

    After that, you can find out the new kernel in directory /boot/.

    4). update contents of isolinux

    $sudo cp /var/tmp/imgcreate-*/install_root/boot/initrd-*.img /var/tmp/imgcreate-*/iso-*/isolinux/initrd0.img $sudo cp /var/tmp/imgcreate-*/install_root/boot/vmlinuz-* /var/tmp/imgcreate-*/iso-*/isolinux/vmlinuz0

    NOTE: execute the above command in your host system.

    5. create an new image

    #exit

    NOTE: execute the above command in chroot environment.

    After following all the above steps, you'll have a new image.

    build btrfs image

    From version 0.20.1 on, mic2 can support btrfs, you can create btrfs image by change fstype=ext3 in your kickstart file to fstype=btrfs. A successful creation will depend on btrfs-progs (btrfs-tools on debian-based distros, btrfsprogs on openSUSE) and btrfs kernel module in your local system, the known issue is we can't create btrfs image on Fedora 11, the issue is the default btrfs kernel module has some issue which will make kernel panic, so for this case, you must ensure you have a stable & latest kernel and btrfs-progs 0.19 on your system, this needs you to build your kernel by yourself and use it to boot your system.

    Btrfs-progs is a prerequisite tool, it includes /sbin/mkfs.btrfs, but its version must match btrfs kernel module, so you must ensure this, mic2 repo http://repo.meego.com/MeeGo/tools/repos/ has an issue which will install btrfs-progs 0.19 when you install mic2, this is an repo sync error, so please ensure you have your distro's btrfs-progs after mic2 is installed, if your distro's btrfs-progs version is 0.19, this isn't an issue, otherwise you must remove btrfs-progs installation introduced by mic2 and reinstall your distro's btrfs-progs.

    How to build btrfs image on Fedora 11 or lower version?

    Download kernel-2.6.34 or kernel-2.6.35Configure btrfs as modulemake; make modules; make install; make modules_installReboot your system using this built-newly kernelInstall btrfs-progs 0.19

    Done, you're ready for creating btrfs image.


    最新回复(0)