Giter Site home page Giter Site logo

image-builder's Introduction

Build your server images on Scaleway

Build Status Scaleway ImageHub Run on Scaleway

Scripts to build the official Image Builder on Scaleway

This image is meant to be used on a Scaleway server.

We use the Docker's building system and convert it at the end to a disk image that will boot on real servers without Docker.

Note that the image is still runnable as a Docker container for debug or for inheritance.

More info

How to build a custom image using scw

My custom image's description

  • based on the official Ubuntu Wily
  • with cowsay pre-installed

1. Making the environment
root@yourmachine> scw run --name="buildcowsay" image-builder
               _
 ___  ___ __ _| | _____      ____ _ _   _
/ __|/ __/ _` | |/ _ \ \ /\ / / _` | | | |
\__ \ (_| (_| | |  __/\ V  V / (_| | |_| |
|___/\___\__,_|_|\___| \_/\_/ \__,_|\__, |
                                    |___/
...

*****************************************************************************

   Welcome on the image-builder.
   Here, you'll be able to craft your own images.

   To configure your environment run:

   $> image-builder-configure

*****************************************************************************

...

root@buildcowsay:~# image-builder-configure
Login (cloud.scaleway.com):                     # yourmail
Password:                                       # yourpassword
root@buildcowsay:~# mkdir cowsay
root@buildcowsay:~# cp Makefile.sample cowsay/Makefile
root@buildcowsay:~# cp Dockerfile.sample cowsay/Dockerfile
root@buildcowsay:~# cd cowsay
root@buildcowsay:~/cowsay# ls -l
total 4
-rw-r--r-- 1 root root  562 Mar 18 10:37 Dockerfile
-rw-r--r-- 1 root root  556 Mar 18 10:38 Makefile
2. Configuring your Makefile
NAME =                  cowsay
VERSION =               latest
VERSION_ALIASES =       1.2.3 1.2 1
TITLE =                 wily-cowsay
DESCRIPTION =           wily with cowsay pre-installed
DOC_URL =
SOURCE_URL =            https://github.com/scaleway-community/...
VENDOR_URL =
DEFAULT_IMAGE_ARCH =	x86_64


IMAGE_VOLUME_SIZE =     50G
IMAGE_BOOTSCRIPT =      stable
IMAGE_NAME =            cowsay

## Image tools  (https://github.com/scaleway/image-tools)
all:	docker-rules.mk
docker-rules.mk:
	wget -qO - https://j.mp/scw-builder | bash
-include docker-rules.mk
3. Configuring your Dockerfile

Note: Don't remove the comments #FROM scaleway/distribution:arch-version # arch=arch

These lines are used by Makefile to handle the multiarch

FROM scaleway/ubuntu:amd64-wily
# following 'FROM' lines are used dynamically thanks do the image-builder
# which dynamically update the Dockerfile if needed.
#FROM scaleway/ubuntu:armhf-wily       # arch=armv7l
#FROM scaleway/ubuntu:arm64-wily       # arch=arm64
#FROM scaleway/ubuntu:i386-wily        # arch=i386
#FROM scaleway/ubuntu:mips-wily        # arch=mips

# Prepare rootfs
RUN /usr/local/sbin/scw-builder-enter

# install cowsay
RUN apt-get install -y cowsay

# Clean rootfs
RUN /usr/local/sbin/scw-builder-leave

You can see other Dockerfiles here

4. Building the custom image
root@buildcowsay> make image_on_local
...
[+] URL of the tarball: http://YOUR_IP:8000/x86_64-cowsay-latest/x86_64-cowsay-latest.tar
[+] Target name: x86_64-cowsay-latest.tar
[+] Creating new server in rescue mode with a secondary volume...
[+] Server created: 3e801785-4e62-425f-bb5a-04eac555ff79
[+] Booting...
Linux vm-10-2-12-155 4.4.4-std-3 #1 SMP Tue Mar 8 17:31:34 UTC 2016 x86_64 GNU/Linux
[+] Server is booted
[+] Formating and mounting disk...
mke2fs 1.42.12 (29-Aug-2014)
ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/vda is mounted.
Creating filesystem with 12207031 4k blocks and 3055616 inodes
Filesystem UUID: 0201e6cd-4848-4118-b762-297968e776af
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

[+] /dev/nbd1 formatted in ext4 and mounted on /mnt
[+] Download tarball and write it to /mnt
[+] Tarball extracted on disk
[+] Stopping the server
[+] Server stopped
[+] Creating a snapshot of disk 1
[+] Snapshot ae6f1ed9-6b77-46f9-861a-2b4d66cb38b5 created
[+] Creating an image based of the snapshot
[+] Image created: 53962798-2933-4cc9-b6c9-1e05f6ff7051   # IMAGE_ID
[+] Deleting temporary server
[+] Server deleted

Your custom image is now available here

4. Running your custom image
root@buildcowsay:~/cowsay# scw run --tmp-ssh-key --name="cowsay-app"  IMAGE_ID
               _
 ___  ___ __ _| | _____      ____ _ _   _
/ __|/ __/ _` | |/ _ \ \ /\ / / _` | | | |
\__ \ (_| (_| | |  __/\ V  V / (_| | |_| |
|___/\___\__,_|_|\___| \_/\_/ \__,_|\__, |
                                    |___/
...

root@cowsay-app:~# cowsay "Hello from my app"
 ____________________________
< Hello from my app >
 ----------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Multiarch

By default make image_on_local use your architecture (x86_64 on C2/VPS and armv7l on C1), if you want to craft your image in arm you must specify the architecture with armv7l

# works only on C2/VPS
ARCH=armv7l make image_on_local

Or run image-builder with C1

root@yourmachine> scw run --name="arm-builder" --commercial-type=C1 image-builder

Distribution

You can contact the admins of #scaleway on irc.online.net.


Know issues

  • if you have an error when you try to connect on your Scaleway account, remove ~/.scwrc and retry

Changelog

1.4.3 (2016-10-24)

  • Bump scw @1.10.1

1.4.2 (2016-04-04)

  • Bump scw @1.9.0

1.4.1 (2016-03-30)

  • Use 50GB instead of 150GB
  • Bump scw @1.8.1

1.4.0 (2016-03-21)

  • Multiarch documentation
  • Bump scw to 1.8.0
  • Improved image-builder-configure (now he don't ask for login/password is ~/.scwrc already exist)

1.3.0 (2015-09-11)

  • Bumped scw to 1.5.0
  • Added a local webserver
  • Put the generation of the key in rc.local

1.2.0 (2015-08-28)

  • Bumped scw to 1.4.0
  • Improved image-builder-configure

1.1.0 (2015-08-06)

  • Improved image-builder-configure (bash now)
  • Added the S3_URL in the image-builder-configure script
  • Added new script to check if your environment is configured as well

1.0.0 (2015-08-05)

This initial version contains:

  • Added scw s3cwd
  • Added ssh key
  • Added script to preconfigure your environment

Links


A note about the Makefile system

All our images are using a simple Makefile containing only variables and including the docker-rules.mk file that is downloaded on the first run.

The docker-rules.mk script is regularly updated, so it is more convenient to keep downloading a fresh copy regularly.

We are using a curl ... | bash install method which can be considered as unsafe. But this command is only used in the build step of the image, as soon as you start a Scaleway server, this command won't be run.


A project by Scaleway

image-builder's People

Contributors

foxboron avatar frivoire avatar moul avatar quentinperez avatar

Watchers

 avatar  avatar

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.