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.
How to build a custom image using scw
My custom image's description
- based on the official Ubuntu Wily
- with
cowsay
pre-installed
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
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
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
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
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 |
|| ||
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
You can contact the admins of #scaleway on irc.online.net
.
- if you have an error when you try to connect on your Scaleway account, remove
~/.scwrc
and retry
- Bump scw @1.10.1
- Bump scw @1.9.0
- Use 50GB instead of 150GB
- Bump scw @1.8.1
- Multiarch documentation
- Bump scw to 1.8.0
- Improved image-builder-configure (now he don't ask for login/password is ~/.scwrc already exist)
- Bumped scw to 1.5.0
- Added a local webserver
- Put the generation of the key in rc.local
- Bumped scw to 1.4.0
- Improved image-builder-configure
- 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
This initial version contains:
- Added scw s3cwd
- Added ssh key
- Added script to preconfigure your environment
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.