Giter VIP home page Giter VIP logo

cirros's Introduction

This is a project to build a small cloud image that has useful tools and
function for debugging or developing cloud infrastructure.

The following works on Ubuntu 10.04 or 12.04 LTS.

To use it, you would do something like:
 * get some build dependencies:
   $ sudo apt-get -y install bison flex texinfo build-essential gettext ncurses-dev unzip bzr qemu-kvm cvs quilt ruby1.9.1

 * get Cirros
   $ git clone -b manila-service-generic https://github.com/csabahenk/cirros
   $ cd cirros

 * download buildroot and setup environment
   $ git submodule init
   $ git submodule update

 * update ./bin/mkcabundle > src/etc/ssl/certs/ca-certificates.crt
   $ ./bin/mkcabundle > src/etc/ssl/certs/ca-certificates.crt

 * apply any local cirros patches to buildroot (note nfsv4 support is
   available in a patch)
   ( cd buildroot && QUILT_PATCHES=$PWD/../patches-buildroot quilt push -a )

 * download the buildroot sources
   $ make ARCH=x86_64 br-source

 * Build buildroot for a given arch
   # ARCH should be set to 'i386', 'x86_64' or 'arm'
   $ make ARCH=x86_64 OUT_D=$PWD/output/x86_64

   This will do a full buildroot build, which will take a while. The output
   that CirrOS is interested in is output/i386/rootfs.tar.
   That file is the full buildroot filesystem, and is used as input for
   subsequent steps here.

 * Download a kernel to use.
   The kernel input to bundle must be in deb format. The ubuntu '-virtual'
   kernel is used as a starting point.

   For example, to get the Ubuntu Saucy kernel for x86_64:

   # Following links to find deb archive from
   # https://launchpad.net/ubuntu/saucy/+package/linux-image
   $ (cd download &&
      wget http://launchpadlibrarian.net/164735055/linux-image-3.11.0-17-generic_3.11.0-17.31_amd64.deb)

 * build disk images using bin/bundle
   $ sudo ./bin/bundle -v output/$ARCH/rootfs.tar download/kernel-$ARCH.deb output/$ARCH/images

 * Then, test using the images
   $ kvm -drive file=disk.img,if=virtio -curses
   $ kvm file=blank.img,if=virtio -curses \
      -kernel kernel -initrd initrd -drive -append "debug-initrd"

To make changes in buildroot configuration:

 * Have an up-to-date buildroot checkout

 * Copy the conf file corresponding to your architecture
   to buildroot tree
   $ cp conf/buildroot-x86_64.config buildroot/.config

 * Perform config changes
   $ make -C buildroot menuconfig

 * Copy back the config file to Cirros project space
   to preserve it for further builds
   $ cp buildroot/.config conf/buildroot-x86_64.config

 * Commit to git
   $ git commit -a

To update buildroot or switch to another version:

 * Do the update and let git know of it

   $ cd buildroot
   $ git pull
     or
   $ git checkout <ref>
   $ cd ..
   $ git add buildroot

 * Update config
   $ cp conf/buildroot-x86_64.config buildroot/.config &&
     make -C buildroot olddefconfig &&
     cp buildroot/.config conf/buildroot-x86_64.config

 * Commit to git
   $ git commit -a

cirros's People

Contributors

ajarr avatar csabahenk avatar smoser avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

cirros's Issues

first run of bundle after file tree build fails with ENOSPACE

output is like as follows:

...
tar: var/log: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/pcmcia: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/db: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/db/sudo: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/lock: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/spool: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/tmp: Cannot open: No such file or directory tar: var/log: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/pcmcia: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/db: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/db/sudo: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/lock: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/spool: Cannot mkdir: No such file or directory 
tar: var: Cannot mkdir: No space left on device 
tar: var/tmp: Cannot open: No such file or directory 
tar: Exiting with failure status due to previous errors 
failed to populate mount point 

tar: Exiting with failure status due to previous errors 
failed to populate mount point 

Workaround: second run succeeds.

def_size option in bin/bundle should be increased

Now, def_size has value 24m, but it is not enough for building fiinal image.
Image with installed samba weights ~75m, so this value must be bigger than that.

If this value is too small, we get error "no space left available".

Does cirros enables any firewall?

I start a cirros vm on Openstack env. It is running an nc server on cirros vm:
sudo nc -p 8080 -l -s 10.10.1.246
Then I curl nc server inside the cirros vm:
$ curl 10.10.1.246:8080
The server inside cirros vm gets request, and works fine.

But when I curl the nc server from the outside world. the curl command hangs on there. The nc server inside cirros vm does not receive any request. (I can ping and ssh the cirros server from outside)

Therefore I suspect there is a firewall that block the cirros ports (8080)? but I am not sure and do not know how to disable the firewall. There is little document about cirros on the Internet.

built image dies in init: can't load library 'libtirpc.so.1'

Followed README on Ubuntu 14.04.3 LTS, then launched image in OpenStack Icehouse. The image failed to boot with this error:

/bin/sh: can't load library 'libtirpc.so.1'

I think I missed something in the buildroot config.

Full console log:

[    3.246630] TCP: cubic registered
[    3.257805] NET: Registered protocol family 10
[    3.271162] NET: Registered protocol family 17
[    3.283789] Key type dns_resolver registered
[    3.296271] Loading module verification certificates
[    3.313200] MODSIGN: Loaded cert 'Magrathea: Glacier signing key: 2a3861a17986e2fcfa4fcad981cb7e6fd9516274'
[    3.340566] registered taskstats version 1
[    3.353449] Key type trusted registered
[    3.365688] Key type encrypted registered
[    3.378271] usb 1-1: new full-speed USB device number 2 using uhci_hcd
[    3.395478] AppArmor: AppArmor sha1 policy hashing enabled
[    3.413826]   Magic number: 11:722:951
[    3.425506] tty tty8: hash matches
[    3.437051] rtc_cmos 00:00: setting system clock to 2015-08-24 19:56:00 UTC (1440446160)
[    3.460193] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found
[    3.475489] EDD information not available.
[    3.492255] Freeing unused kernel memory: 1364K (ffffffff81d10000 - ffffffff81e65000)
[    3.514132] Write protecting the kernel read-only data: 12288k
[    3.532235] Freeing unused kernel memory: 1032K (ffff8800016fe000 - ffff880001800000)
[    3.557182] Freeing unused kernel memory: 784K (ffff880001b3c000 - ffff880001c00000)
/bin/sh: can't load library 'libtirpc.so.1'
[    3.587916] Kernel panic - not syncing: Attempted to kill init! exitcode=0x00001000
[    3.587916] 
[    3.589538] CPU: 0 PID: 1 Comm: init Not tainted 3.11.0-17-generic #31-Ubuntu
[    3.589538] Hardware name: OpenStack Foundation OpenStack Nova, BIOS rel-1.8.1-0-g4adadbd-20150316_085822-nilsson.home.kraxel.org 04/01/2014
[    3.589538]  ffffffff81c450a0 ffff88001e733e70 ffffffff816e7645 ffffffff81a40d48
[    3.589538]  ffff88001e733ee8 ffffffff816e1589 ffffffff00000010 ffff88001e733ef8
[    3.589538]  ffff88001e733e98 ffff88001e7a0630 0000000000001000 ffff88001e7a0390
[    3.589538] Call Trace:
[    3.589538]  [<ffffffff816e7645>] dump_stack+0x45/0x56
[    3.589538]  [<ffffffff816e1589>] panic+0xc8/0x1d7
[    3.589538]  [<ffffffff81064906>] do_exit+0x926/0xa40
[    3.589538]  [<ffffffff81064a57>] SyS_exit+0x17/0x20
[    3.589538]  [<ffffffff816f74dd>] system_call_fastpath+0x1a/0x1f

unrealistic amount of RAM is needed for the image

Far too much RAM is needed to boot the image. Original Cirros / ubuntu service VM is fine with 64 megabytes of RAM, for our image the smallest power of two it boot with is 8, so the needed RAM is in between 128M and 256M.

The reason is that the initramfs image is almost identical to the root image and thus the whole thing is fitted to RAM on boot. In our case lot of stuff was added to the root image hence this follows...

rpcbind not installed for nfs daemon

Trying run nfs:

Starting NFS statd: touch: /var/lock/subsys/nfslock: No such file or directory
done
Starting NFS services: done
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
done
Starting NFS mountd: Cannot register service: RPC: Unable to receive; errno = Connection refused
done
touch: /var/lock/subsys/nfs: No such file or directory

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.