Git Product home page Git Product logo

compute-archlinux-image-builder's Introduction

Arch Linux Image Builder for Google Compute Engine

This project provides a script that creates an Arch Linux image that can run on Google Compute Engine.

The image is configured to be as close as possible to a base Arch Linux installation, while still allowing it to be fully functional and optimized for Compute Engine. Notable choices made and differences compared to a standard Arch Linux installation are the following:

  • systemd-boot is used with a UEFI-based boot and a GPT partition table.
  • Serial console logging is enabled from kernel command line and journald is configured to forward to it.
  • Block multiqueue is configured from the kernel command line to optimize Compute Engine disk performance.
  • A minimal initcpio is configured for booting on Compute Engine virtual machines.
  • Root filesystem is ext4.
  • Locale is set to en_US.UTF-8 and timezone is set to UTC.
  • Network is configured through dhclient.
  • Systemd-timesyncd is enabled and configured to use the Compute Engine metadata server.
  • Pacman keyring is configured to be built and initialized on first boot.
  • Pacman mirror list is taken fresh from Arch Linux servers at the time the image is built.
  • Linux Guest Environment for Google Compute Engine is installed and enabled.
  • An OpenSSH server is installed and enabled, with root login and password authentication forbidden. User SSH keys are deployed and managed automatically by the Linux Guest Environment as described in the corresponding documentation.
  • Sudo is installed. Permission to use sudo is managed automatically by Linux Guest Environment.
  • Root partition and filesystem are automatically extended at boot using systemd-repart and systemd-growfs, to support dynamic disk resizing.
  • An additional Pacman repository is used to install and keep the Linux Guest Environment packages up to date.

Prebuilt Images

You can use Cloud SDK to create instances with the latest prebuilt Arch Linux image. To do that follow the SDK installation procedure, and then run the following command:

$ gcloud compute instances create INSTANCE_NAME \
      --image-project=arch-linux-gce --image-family=arch

For older images, see the current_images.txt file.

Build Your Own Image

You can build the Arch Linux image yourself with the following procedure:

  1. Install the required dependencies and build the image

    $ sudo pacman -S --needed arch-install-scripts dosfstools e2fsprogs
    $ git clone https://github.com/GoogleCloudPlatform/compute-archlinux-image-builder.git
    $ cd compute-archlinux-image-builder
    $ sudo ./build-arch-gce

    You can also use the build-arch-gce package from the AUR, and run sudo /usr/bin/build-arch-gce

    If the build is successful, this will create an image file named arch-vDATE.tar.gz in the current directory, where DATE is the current date.

  2. Install and configure the Cloud SDK.

  3. Copy the image file to Google Cloud Storage:

    $ gsutil mb gs://BUCKET_NAME
    $ gsutil cp arch-vDATE.tar.gz gs://BUCKET_NAME
  4. Import the image file to Google Cloud Engine as a new custom image:

    $ gcloud compute images create IMAGE_NAME \
          --source-uri=gs://BUCKET_NAME/arch-vDATE.tar.gz \
          --guest-os-features=GVNIC,UEFI_COMPATIBLE,VIRTIO_SCSI_MULTIQUEUE

You can now create new instances with your custom image:

$ gcloud compute instances create INSTANCE_NAME --image=IMAGE_NAME

The Google Cloud Storage file is no longer needed, so you can delete it if you want:

$ gsutil rm gs://BUCKET_NAME/arch-vDATE.tar.gz

Contributing Changes

Licensing

All files in this repository are under the Apache License, Version 2.0 unless noted otherwise.

Support

Google Inc. does not provide any support, guarantees, or warranty for this project or the images provided.

compute-archlinux-image-builder's People

Contributors

cceckman avatar crvv avatar jeremyje avatar lcastelli avatar shulhan avatar simoleone avatar skbeh avatar toastwaffle avatar tswast avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

compute-archlinux-image-builder's Issues

Image is 100 GB, can it be 10 GB?

Hi, I noticed the pre-built image calls for a 100 GB disk image. Is there any way this could be a 10-ish GB image like the other standard ones? I realize I can build my own but I was thinking others might want a smaller boot disk also.

having a little trouble.... with the exact text being:

faddat_gmail_com@instance-1:~/compute-archlinux-image-builder$ sudo ./build-arch-on-gce.sh --upload=gs://archisfresh/archlinux
12202014.tar.gz
Creating VM to build Arch Linux
Creating Instance, archbuilder24870
usage: gcloud compute instances create NAME [NAME ...] [optional flags]
ERROR: (gcloud.compute.instances.create) argument --metadata: key/value pair must be of the form KEY=VALUE; received: script-p
arams=--upload=gs://archisfresh/archlinux12202014.tar.gz

Figured that tossing the = in there would resolve it, but it did not. I'm going to try building it "locally" on the current GCE instance. Will keep appraised if I suddenly have an epiphany....

build-arch-gce locale & temporary files issues?

During run of sudo ./build-arch-gce, two warnings and one error are reported:

( 3/13) Warn about old perl modules
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
( 4/13) Updating journal message catalog...
( 5/13) Reloading system manager configuration...
Running in chroot, ignoring request: daemon-reload
( 6/13) Updating udev hardware database...
( 7/13) Applying kernel sysctl settings...
( 8/13) Creating system user accounts...
( 9/13) Creating temporary files...
error: command failed to execute correctly
(10/13) Reloading device manager configuration...
Running in chroot, ignoring request.
(11/13) Arming ConditionNeedsUpdate...
(12/13) Updating the info directory file...
(13/13) Rebuilding certificate stores...

How can they be fixed? I am asking it here simply because I can't grok pervasively used gawk commands in short time.

Freaking hot!

Testing it out now. If it works, then I'm going to be mighty curious to learn what other platforms I can use this for. Thanks for your work!

Set root of gce-arch-images bucket to world-readable

$:gsutil ls -l gs://gce-arch-images/*.tar.gz
AccessDeniedException: 403 Forbidden

It would be really nice to be able to look at the images in the bucket... without having to go to and read README.md.

The public can read / list individual images:

$:gsutil ls -l gs://gce-arch-images/arch-v20160502.tar.gz
 651521944  2016-05-02T06:55:43Z  gs://gce-arch-images/arch-v20160502.tar.gz
TOTAL: 1 objects, 651521944 bytes (621.34 MiB)

but not the bucket as a whole.

Can we set the R bit here- or whatever the equivalent is for GCS buckets (READER role for allAuthenticatedUsers)?

IPv4 and IPv6 (dual-stack) support?

I created a custom VPC network with IPv6 support today and configured my old instance to use it.

Although ip a s eth0 shows that the interface has an external IPv6 address, I cannot reach any public IPv6 addresses. For example, ping -6 dns.google prints ping: connect: Network is unreachable.

Then I created a new instance using the ubuntu-2204-jammy-v20220528 image and everything worked fine. This makes me think that my old instance (created about two years ago) might have some unknown problem. So I used this project to create a new instance:

$ gcloud compute instances create archlinux-ipv6-test --image-project arch-linux-gce --image-family arch --network-interface subnet=custom,stack-type=IPV4_IPV6

Everything worked fine until I rebooted the instance with sudo reboot. And after reboot ip a s eth0 shows no external IPv6 address.

I don't know if I'm doing something wrong, are there any other steps I need to do? Or does this project not support IPv6 yet?

Latest Build should include archlinux-keyring package

Hi all,
I just used latest image (v20160502) but build can not install some packages/do a full system upgrade due to package archlinux-keyring being missed.

Installing vim for example gives the error of:
:: File /var/cache/pacman/pkg/vim-runtime-8.0.1436-1-x86_64.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)).

After installing keyring (pacman -Sy archlinux-keyring) everything works fine.

Is there a way to generate a new build and ask for a PR? (I honestly didn't look really further on how to do find that info)

Issue with multiple line outputs since latest Arch/Systemd release

There were some updates made public for the Linux Kernel and Systemd today. Ever since running said updates, anything which has multiple lines of output seem to crash the ssh connection.

An easy example to replicate is running dmesg.

I tested out the newest updates on my home server and everything worked great.

Local SSD causes SSH to never become available

Hi folks,

Thanks for maintaining the Arch Linux image! I really appreciate it.

I might be doing something wrong, but it seems like creating an instance with a local SSD causes the SSH server to never come online. The "SSH" button on the control panel doesn't ever connect either, and the page to view the serial output just shows an error saying it "failed to load."

gcloud compute instances create mymachinename --image-project=arch-linux-gce --image-family=arch --local-ssd interface=nvme

... same results using interface=scsi.

Thanks,
Ryan

Latest image is over a year old

It is a little harder to get started with the latest image as it has become over a year old. I did the following to get started:

1. resolve key errors when updating the system by first updating

$ sudo pacman -S archlinux-keyring

2. resolve the mirror errors by updating the mirror list using a technique from https://wiki.archlinux.org/title/mirrors#Sorting_mirrors

Thanks for this project. I have found it very helpful over the years.

Access denied

$ gcloud compute images create image-name   --source-image arch   --source-image-project arch-linux-gce
ERROR: (gcloud.compute.images.create) Could not fetch image resource:
 - Required 'compute.images.get' permission for 'projects/arch-linux-gce/global/images/arch'

Replace GRUB with systemd-boot

As the image becomes UEFI-based, we can safely replace GRUB with systemd-boot to make the setup simpler and more robust.
GRUB is known to be complex, and it is easy to be broken if we update the kernel without regenerating its config. Its recent update even breaks in some situation if we didn't reinstall it.
Systemd-boot is simpler, and its configs can be written by hands, which enables us to manually fix it without chrooting. Also, because we don't need to deal with various hardware environments, we don't need the complexity of GRUB.
All in all, I think systemd-boot is a better choice for using with GCE than GRUB.

API Updated and left this script behind

Long story short, as of 12JAN2017, this script fails as follows:

user@gapps-project-name:~/compute-archlinux-image-builder$ ./build-arch-on-gce.sh --upload gs://cmh-custom-utilities.appspot.com/archlinux.tar.gz
Your active configuration is: [cloudshell-2036]
Creating VM to build Arch Linux
Creating Instance, archbuilder28275
ERROR: (gcloud.compute.instances.create) unrecognized arguments:
  instance-name=archbuilder28275
  instance-zone=us-central1-f
  git-source-uri=https://github.com/GoogleCloudPlatform/compute-archlinux-image-builder.git
  storage-full
You can monitor progress of the build via:
  gcloud compute instances get-serial-port-output archbuilder28275 --zone us-central1-f | grep startupscript

user@gapps-project-name:~/compute-archlinux-image-builder$

Nothing appears to be built and upon further reading online it seems the syntax and options used in build-arch-on-gce.sh have gone deprecated.

Request: enable UEFI_COMPATIBLE on public image

Currently the public image for project arch-linux-gce does not have the UEFI_COMPATIBLE flag, only VIRTIO_SCSI_MULTIQUEUE:

$ gcloud compute images describe-from-family arch --project=arch-linux-gce
archiveSizeBytes: '810095680'
creationTimestamp: '2022-03-15T12:36:46.018-07:00'
description: Arch Linux built on 20220315.
diskSizeGb: '10'
family: arch
guestOsFeatures:
- type: VIRTIO_SCSI_MULTIQUEUE
id: '6771268489385432098'
kind: compute#image
labelFingerprint: 42WmSpB8rSM=
name: arch-v20220315
rawDisk:
  containerType: TAR
  source: ''
selfLink: https://www.googleapis.com/compute/v1/projects/arch-linux-gce/global/images/arch-v20220315
sourceType: RAW
status: READY
storageLocations:
- us

According to documentation [1], an UEFI image add several advantages: secure boot, Virtual Trusted Platform Module, and Integrity monitoring.

Another advantages is to allow user to swap the boot disk from non-arch linux with UEFI_COMPATIBLE to new arch-linux image. For example, here is an error when replacing centos-8 boot disk with arch,

>>> local:  35: gcloud [compute disks create demo-root --zone=asia-southeast1-b --image-project=arch-linux-gce --image-family=arch --type=pd-ssd --size=10GB]
Created [https://www.googleapis.com/compute/v1/projects/<redacted>/zones/asia-southeast1-b/disks/demo-root].
NAME                 ZONE               SIZE_GB  TYPE    STATUS
demo-root  asia-southeast1-b  10       pd-ssd  READY

>>> local:  43: gcloud [compute instances attach-disk demo --zone=asia-southeast1-b --disk=demo-root --boot]
ERROR: (gcloud.compute.instances.attach-disk) Could not fetch resource:
 - UEFI setting must be the same for the instance and the boot disk.

Question: how to create an image with UEFI_COMPATIBLE enable?

Request: enable UEFI_COMPATIBLE on public image.

[1] https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images#guest-os-features

Use systemd-networkd instead of dhclient?

Any reason systemd-networkd is not used (which is inbuilt) instead of dhclient (which is an external package needs to be installed?). I was wondering if there is any issue with it in gcp I need to be aware of as I am planning to use for a different purpose.

Script breaks at the end

As the script in this repository is outdated (and does not work due "makepkg --asroot" issue), I'm using a newer version from this repo:

https://github.com/jeremyje/compute-archlinux-image-builder

As there is not possible to report an issue, and I see you are the same author on both repositories I'll post the question here.

At the end of the image creation the script breaks with this output:

DEBUG: ['tar', '-Szcf', '/opt/ssasa/compute-archlinux-image-builder/arch-v20150526.tar.gz', 'disk.raw']
Traceback (most recent call last):
File "./build-gce-arch.py", line 244, in
main()
File "./build-gce-arch.py", line 62, in main
utils.DeleteDirectory(workspace_dir)
File "/opt/ssasa/compute-archlinux-image-builder/utils.py", line 169, in DeleteDirectory
shutil.rmtree(dir_path)
File "/usr/lib/python3.4/shutil.py", line 464, in rmtree
_rmtree_safe_fd(fd, path, onerror)
File "/usr/lib/python3.4/shutil.py", line 402, in _rmtree_safe_fd
_rmtree_safe_fd(dirfd, fullname, onerror)
File "/usr/lib/python3.4/shutil.py", line 398, in _rmtree_safe_fd
onerror(os.open, fullname, sys.exc_info())
File "/usr/lib/python3.4/shutil.py", line 396, in _rmtree_safe_fd
dirfd = os.open(name, os.O_RDONLY, dir_fd=topfd)
PermissionError: [Errno 13] Permission denied: 'gcearch1c0309o6'

the diff that worked for me

Thanks for providing this useful tool! I installed via the AUR package. I needed the following diff to successfully build an image as of today on a manjaro base system:

diff /usr/bin/build-arch-gce /tmp/build-arch-gce                                                                                                                                         ✔  owen@titan
79c79
<       base linux dosfstools e2fsprogs dhclient openssh sudo google-compute-engine
---
>       base linux61 dosfstools e2fsprogs dhclient openssh sudo google-compute-engine
174,176c174,177
<               { print } END { assert(f == 1, "f == 1") }' /etc/mkinitcpio.d/linux.preset
<       rm /boot/initramfs-linux-fallback.img
<       mkinitcpio --nocolor --preset linux
---
>               { print } END { assert(f == 1, "f == 1") }' /etc/mkinitcpio.d/linux61.preset
>       rm -f /boot/initramfs-linux-fallback.img
>         ls -l /etc/mkinitcpio.d/
>       mkinitcpio --nocolor --preset linux61

hope this helps to others.

Read only?

google cloud says the image is read only and doesn't create it properly.

makepkg problem

The "--asroot" option is no longer supported, which causes the script stopped at installing AUR packages.

Script can not find mkinitcpio.conf whe running additional setup

I'm trying to build from a brand new Linode Arch VM.

I tried to fix it but it seems I don't know Arch enough...

Generation complete.
-- Configuring journald.
-- Configuring ssh.
-- Configuring pacman.
-- Enabling other services.
-- Configuring initcpio.
gawk: inplace:53: warning: inplace::begin: Cannot stat `/etc/mkinitcpio.conf' (No such file or directory)

gawk: inplace:53: fatal: cannot open file `/etc/mkinitcpio.conf' for reading (No such file or directory)

Error: gawk -i assert -i inplace ' /^MODULES=/ { $0 = "MODULES=(virtio_pci virtio_scsi sd_mod ext4)"; ++f1 } /^BINARIES=/ { $0 = "BINARIES=(fsck fsck.ext4)"; ++f2 } /^HOOKS=/ { $0 = "HOOKS=(base modconf)"; ++f3 } { print } END { assert(f1 * f2 * f3 == 1, "f == 1") }' /etc/mkinitcpio.conf exited with status 2
Error: arch-chroot -- "$mount_dir" /bin/bash -s -- "$loop_dev" <<-'EOS' set -eEuo pipefail trap 'echo "Error: \$BASH_COMMAND` exited with status $?"' ERR

echo "-- Configuring time."
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
gawk -i assert -i inplace '
/^#NTP=/ { $0 = "NTP=metadata.google.internal"; ++f }
{ print } END { assert(f == 1, "f == 1") }' /etc/systemd/timesyncd.conf
systemctl --quiet enable systemd-timesyncd

echo "-- Configuring locale."
gawk -i assert -i inplace '
/^#en_US.UTF-8 UTF-8\s*$/ { $0 = substr($0, 2); ++f }
{ print } END { assert(f == 1, "f == 1") }' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

echo "-- Configuring journald."
gawk -i assert -i inplace '
/^#ForwardToConsole=/ { $0 = "ForwardToConsole=yes"; ++f }
{ print } END { assert(f == 1, "f == 1") }' /etc/systemd/journald.conf

echo "-- Configuring ssh."
gawk -i assert -i inplace '
/^#PasswordAuthentication / { $0 = "PasswordAuthentication no"; ++f1 }
/^#PermitRootLogin / { $0 = "PermitRootLogin no"; ++f2 }
{ print } END { assert(f1 * f2 == 1, "f == 1") }' /etc/ssh/sshd_config
systemctl --quiet enable sshd

echo "-- Configuring pacman."
curl --silent --show-error -o /etc/pacman.d/mirrorlist
'https://www.archlinux.org/mirrorlist/?country=all&ip_version=4&use_mirror_status=on'
gawk -i assert -i inplace '
/^#Server / { $0 = substr($0, 2); ++f }
{ print } END { assert(f > 0, "f > 0") }' /etc/pacman.d/mirrorlist
cat <<-'EOF' > /etc/systemd/system/pacman-init.service
[Unit]
Description=Pacman keyring initialization
ConditionDirectoryNotEmpty=!/etc/pacman.d/gnupg

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/pacman-key --init
ExecStart=/usr/bin/pacman-key --populate archlinux

[Install]
WantedBy=multi-user.target
EOF
systemctl --quiet enable pacman-init

echo "-- Enabling other services."
systemctl --quiet enable
dhclient@ens4 rngd growpartfs@-
google-accounts-daemon google-clock-skew-daemon google-instance-setup
google-network-daemon google-shutdown-scripts google-startup-scripts

echo "-- Configuring initcpio."
gawk -i assert -i inplace '
/^MODULES=/ { $0 = "MODULES=(virtio_pci virtio_scsi sd_mod ext4)"; ++f1 }
/^BINARIES=/ { $0 = "BINARIES=(fsck fsck.ext4)"; ++f2 }
/^HOOKS=/ { $0 = "HOOKS=(base modconf)"; ++f3 }
{ print } END { assert(f1 * f2 * f3 == 1, "f == 1") }' /etc/mkinitcpio.conf
gawk -i assert -i inplace '
/^PRESETS=/ { $0 = "PRESETS=(default)"; ++f }
/#?fallback_/ { next }
{ print } END { assert(f == 1, "f == 1") }' /etc/mkinitcpio.d/linux.preset
rm /boot/initramfs-linux-fallback.img
mkinitcpio --nocolor --preset linux

echo "-- Configuring grub."
grub-install --target=i386-pc -- "$1"
cat <<-'EOF' > /etc/default/grub
# GRUB boot loader configuration
GRUB_CMDLINE_LINUX="console=ttyS0,38400n8 elevator=noop scsi_mod.use_blk_mq=Y"
GRUB_PRELOAD_MODULES="part_gpt part_msdos"
GRUB_TIMEOUT=0
GRUB_DISABLE_RECOVERY=true
EOF
grub-mkconfig -o /boot/grub/grub.cfg
EOS
` exited with status 2

  • Cleaning up.

Cannot provision with docker-machine: hostname command not found

We're using arch linux in our CI farm since the deprecation of flatcar earlier this year. So far everything was running fine, but starting from today I'm getting the following output whenever a new machine is provisioned via docker-machine:

sudo: hostname: command not found

I digged into the code of docker-machie and it looks like it is expecting the hostname binary to be present in order to set the hostname:

https://gitlab.com/gitlab-org/ci-cd/docker-machine/-/blob/master/libmachine/provision/generic.go#L41

func (provisioner *GenericProvisioner) SetHostname(hostname string) error {
	if _, err := provisioner.SSHCommand(fmt.Sprintf(
		"sudo hostname %s && echo %q | sudo tee /etc/hostname",
		hostname,
		hostname,
	)); err != nil {
		return err
	}

The binary is however no longer present. I saw that you changed something yesterday on master which might have triggered an image rebuild. Are you aware of a change so that inetutils (the package that provides hostname) is now no longer present in the base install? (Sidemark: the laptop I've set up last week does not have it installed either)

I think the issue needs ultimately fixed in docker-machine, but the project is in maintenance mode. Hence, I'm wondering whether inetutils should be included in this image?

Second: Do you provide "old" arch linux images, e.g. the one that was still present on GCP yesterday?

How to make the default partition /dev/sda1 instead of /dev/sda2?

First of all, huge thanks for this project, it really helped me a lot! I love this project! ❤️

However, I found that the default installed system is on the /dev/sda2 disk partition. Although this is okay, but OCD makes me want to ask if you guys have a way to make the default disk partition /dev/sda1 instead of /dev/sda2 when installing the system (or when building the image)?

Issue with build script.

Hey!

I was trying to run the build script on an Arch compute engine machine, with gcloud installed and got an error. Not sure what it means :P

Thanks for the project!

#22 ❯❯❯ ./build-arch-on-gce.sh --upload gs://${BUCKET}/archlinux.tar.gz
Creating VM to build Arch Linux
Creating Instance, archbuilder17824
WARNING: We noticed that you are using space-separated lists, which are deprecated. Please transition to using comm
a-separated lists instead (try "--metadata script-params=--upload gs://bucket/archlinux.tar.gz,instance-name=a
rchbuilder17824,instance-zone=us-central1-f,git-source-uri=https://github.com/GoogleCloudPlatform/compute-archlinux
-image-builder.git"). If you intend to use [instance-name=archbuilder17824, instance-zone=us-central1-f, git-source
-uri=https://github.com/GoogleCloudPlatform/compute-archlinux-image-builder.git] as positional arguments, put the f
lags at the end.
WARNING: We noticed that you are using space-separated lists, which are deprecated. Please transition to using comm
a-separated lists instead (try "--scopes compute-rw,storage-full"). If you intend to use [storage-full] as position
al arguments, put the flags at the end.
ERROR: (gcloud.compute.instances.create) Failed to find image for alias [ubuntu-14-10] in public image project [ubu
ntu-os-cloud].
You can monitor progress of the build via:
  gcloud compute instances get-serial-port-output archbuilder17824 --zone us-central1-f | grep startupscript

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.