How can I update the kernel of my Linode's configuration profile via the CLI?
I'm creating Linodes with the CLI and I want to set the kernel of my new Linodes to be GRUB 2. How do I do this?
Linode's deprecated v3-based CLI cannot update the kernel, so we'll need to use the new v4 API to take care of this.
Installing the Python v4 API client
Linode offers a Python client for the v4 API, and we'll use that to complete this task. The following page shows how to install the Python client:
You'll also need to create a v4 API token; you can do this from our new cloud.linode.com website:
Creating a Linode and updating the kernel
Once you've installed it, launch Python in your Terminal. Then, import the LinodeClient object and create an instance of it with your API token:
>>> from linode import LinodeClient >>> client = LinodeClient("your-api-token-here")
Then create your new Linode. These arguments will create a Linode 2GB in Fremont with our Debian 8 image and whatever root password you provide:
>>> new_linode = client.linode.create_instance( ... "g5-standard-1", ... region="us-west-1a", ... image="linode/debian8", ... booted=False, ... root_pass="your-root-pass-here") ... >>> new_linode Linode: 7942105
You can also pass in other Linode plans, regions, and images. I'll include sections at the bottom of this post showing how to list what plans, regions, and images are available using the API.
Get the configuration profile object from the Linode object:
>>> config = new_linode.configs
Update the kernel and save the change. I'll include a section below that shows how to list the available kernels.
>>> config.kernel = "linode/grub2" >>> config.save() True
Boot the Linode:
>>> new_linode.boot() True
You should now be able to use the Linode as normal.
Listing regions, Linode plans, images, and kernels via the API
>>> regions = client.get_regions() >>> for region in regions: ... print(region) ... Region: us-central Region: us-west Region: us-southeast Region: us-east Region: eu-west Region: ap-south Region: eu-central Region: ap-northeast Region: ap-northeast-1a
>>> types = client.linode.get_types() >>> for type in types: ... print(type) ... Type: g5-standard-1 Type: g5-standard-2 Type: g5-standard-4 Type: g5-standard-6 Type: g5-standard-8 Type: g5-standard-12 Type: g5-standard-16 Type: g5-standard-20 Type: g5-nanode-1 Type: g5-highmem-1 Type: g5-highmem-2 Type: g5-highmem-4 Type: g5-highmem-8 Type: g5-highmem-16
>>> images = client.get_images() >>> for image in images: ... print(image) ... Image: linode/slackware13.37 Image: linode/slackware14.1 Image: linode/ubuntu14.04lts Image: linode/centos6.8 Image: linode/centos7 Image: linode/debian7 Image: linode/debian8 Image: linode/ubuntu16.04lts Image: linode/arch Image: linode/slackware14.2 Image: linode/gentoo Image: linode/opensuseleap42.2 Image: linode/containerlinux Image: linode/debian9 Image: linode/fedora26 Image: linode/opensuse42.3 Image: linode/ubuntu17.10 Image: linode/fedora27 Image: linode/ubuntu18.04 Image: linode/fedora28
>>> kernels = client.linode.get_kernels() >>> for kernel in kernels: ... print(kernel) ...
Further v4 API documentation is available on our developers site: developers.linode.com
Linode recently updated the Linode CLI: linode-cli
This new version is capable of setting the kernel. Here's the syntax for that:
linode-cli linodes config-update <Linode ID> <Configuration Profile ID> --kernel "linode/grub2"