From dc29d1a693ee6cd480a01655186ecbb1e90daf04 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 2 May 2022 20:57:18 +0000 Subject: [PATCH 01/21] Update GCP to use "Products" and add overview. --- content/GCP/01_intro_to_cloud_console.ipynb | 44 ++++++++++++------- content/GCP/02_intro_to_compute.ipynb | 2 +- content/GCP/glossary.ipynb | 1 + .../GCP/img/CLASS-Essentials-GCP-Overview.svg | 1 + 4 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 content/GCP/img/CLASS-Essentials-GCP-Overview.svg diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index cde498b..dc5d0ce 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -124,9 +124,9 @@ "tags": [] }, "source": [ - "## Services\n", + "## Products\n", "\n", - "The web console is used to control and observe the cloud from the browser. It should only be used for simple and one-time tasks, exploring new services, accessing documentation, or for monitoring and debugging resources in the cloud. Programmatic control through the console, programming languages (for example Python), and other automation tools should be used for day to day activities to make the most out of the cloud and to help with the reproducibility of research and teaching.\n", + "The web console is used to control and observe the cloud from the browser. It should only be used for simple and one-time tasks, exploring new products, accessing documentation, or for monitoring and debugging resources in the cloud. Programmatic control through the console, programming languages (for example Python), and other automation tools should be used for day to day activities to make the most out of the cloud and to help with the reproducibility of research and teaching.\n", "\n", "The Navigation Menu (often called the **hamburger**) is used to navigate to the various products, which are also sometimes called services.\n", "\n", @@ -136,7 +136,7 @@ " * You can pin frequently used items on the top of this page by clicking on the pin icon. \n", " * Click the hamburger again to hide the Left Sidebar.\n", "\n", - "All the different products and services are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " + "All the different products are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " ] }, { @@ -148,13 +148,35 @@ "source": [ "```{admonition} Exercise\n", "\n", - "Take a few moments to navigate a few key services.\n", + "Take a few moments to navigate a few key products.\n", " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", - " * You will probably need to \"Enable\" this service first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", - " * Navigate to the \"Compute Engine\" service under the \"Compute\" product group and enable the service if necessary.\n", + " * You will probably need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", + " * Navigate to the \"Compute Engine\" product under the \"Compute\" product group and enable the product if necessary.\n", "```" ] }, + { + "cell_type": "markdown", + "id": "9470567b-9966-4c07-a7ad-a94358530480", + "metadata": { + "tags": [] + }, + "source": [ + "## Putting it Together\n", + "\n", + "Now that we have the basics, we can provide a bit larger picture of the cloud and all the pieces:\n", + "\n", + "![gcp-overview](img/CLASS-Essentials-GCP-Overview.svg)\n", + "\n", + " * Project - a container to house and manage resources.\n", + " * Products - The different types of resources or services within Google Cloud.\n", + " * Resources - individual products running or stored within Google cloud such as compute, storage, networking, databases, etc. Resources can belong to only one Project.\n", + " * Billing Account - used to pay for resources and services consumed. Each project has only one billing account.\n", + " * Account - the identity that is used to accesses resources within Google Cloud. Note: this is *NOT* the Billing Account.\n", + " * Identity Access and Management (IAM) - manages access (permissions) to a resource by an account (also referred to as a principal).\n", + " * Organization - projects may optionally be housed in an organization (arranged in folders), which can add permissions and restrictions in a hierarchical manner. Projects can only belong to one Organization." + ] + }, { "cell_type": "markdown", "id": "e955eb3a-4fdc-448b-aef8-ed1dbe2a73d9", @@ -227,14 +249,6 @@ " * Why is this important?\n", "```" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "530f7a45-5708-4213-b120-71c6328f7026", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -253,7 +267,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/content/GCP/02_intro_to_compute.ipynb b/content/GCP/02_intro_to_compute.ipynb index 815c971..f210727 100644 --- a/content/GCP/02_intro_to_compute.ipynb +++ b/content/GCP/02_intro_to_compute.ipynb @@ -340,7 +340,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/content/GCP/glossary.ipynb b/content/GCP/glossary.ipynb index b0ef7a6..af1f059 100644 --- a/content/GCP/glossary.ipynb +++ b/content/GCP/glossary.ipynb @@ -13,6 +13,7 @@ " * **Bucket** - A collection of key value pairs (similar to a Python dictionary) and is often called object storage. Object storage in Google is called Cloud Storage and is similar to Amazon S3.\n", " * **Cloud Shell** - A Linux command line interface (CLI) running inside the GCP web console. \n", " * **Disk Image** - The operating system disk for a **VM Instance** such as Ubuntu, Debian, and other Linux distributions.\n", + " * **Organization** - A top level container for projects in an institution, usually one per institution.\n", " * **Project** - Resources and services in Google Cloud are created within a single Project. \n", " * **Project Name** - The long human readable name of your project. You can change this.\n", " * **Project ID** - an alpha-numeric string identifier for the project. This is not changeable.\n", diff --git a/content/GCP/img/CLASS-Essentials-GCP-Overview.svg b/content/GCP/img/CLASS-Essentials-GCP-Overview.svg new file mode 100644 index 0000000..999cc8a --- /dev/null +++ b/content/GCP/img/CLASS-Essentials-GCP-Overview.svg @@ -0,0 +1 @@ + \ No newline at end of file From 0ef7ddbc800918a242ce6aaa21d99934cbb142a2 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 2 May 2022 22:01:09 +0000 Subject: [PATCH 02/21] GCP: Cleanup Products and add "resources". --- content/GCP/01_intro_to_cloud_console.ipynb | 33 +++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index dc5d0ce..b5e4872 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -126,9 +126,7 @@ "source": [ "## Products\n", "\n", - "The web console is used to control and observe the cloud from the browser. It should only be used for simple and one-time tasks, exploring new products, accessing documentation, or for monitoring and debugging resources in the cloud. Programmatic control through the console, programming languages (for example Python), and other automation tools should be used for day to day activities to make the most out of the cloud and to help with the reproducibility of research and teaching.\n", - "\n", - "The Navigation Menu (often called the **hamburger**) is used to navigate to the various products, which are also sometimes called services.\n", + "**Products** are the various services offered on Google Cloud such as *Google Compute Engine* and *Cloud Storage*. Within each product you create **resources** that you can use, such virtual machines. The Navigation Menu (often called the **hamburger**) is used to navigate to the various products.\n", "\n", "![hamburger-navigation](img/hamburger-navigation.png)\n", "\n", @@ -136,7 +134,20 @@ " * You can pin frequently used items on the top of this page by clicking on the pin icon. \n", " * Click the hamburger again to hide the Left Sidebar.\n", "\n", - "All the different products are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " + "All the different products and resources are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " + ] + }, + { + "cell_type": "markdown", + "id": "b87ee733-aed7-452d-96a0-0a07d34e76ec", + "metadata": {}, + "source": [ + "```{admonition} Tip\n", + ":class: tip\n", + "\n", + "The web console is used to control and observe the cloud from the browser. It should only be used for simple and one-time tasks, setting up basic resources exploring new products, accessing documentation, or for monitoring and debugging resources in the cloud. Programmatic control through the console, programming languages (for example Python), and other automation tools should be used for day to day activities to make the most out of the cloud and to help with the reproducibility of research and teaching.\n", + "\n", + "```" ] }, { @@ -148,6 +159,8 @@ "source": [ "```{admonition} Exercise\n", "\n", + ":class: exercise\n", + "\n", "Take a few moments to navigate a few key products.\n", " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", " * You will probably need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", @@ -244,11 +257,19 @@ "\n", "Before we move on, do the following:\n", "* Double check that you are in the correct account and project that you will be using for this lesson.\n", - "* Take a moment to reflect on the \"Who, What, and Where\" of the cloud. \n", - " * What is your Who, What, and Where?\n", + "* Take a moment to reflect on the \"Who, Where, and What\" of the cloud. \n", + " * What is your Who, Where, and What?\n", " * Why is this important?\n", "```" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7756956a-c778-4fec-acc1-2de9e96266b3", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { From 46f525eb5b90ba7551198e080d869a97f7a634e3 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 2 May 2022 22:01:47 +0000 Subject: [PATCH 03/21] Replace services with products. --- content/GCP/02_intro_to_compute.ipynb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/GCP/02_intro_to_compute.ipynb b/content/GCP/02_intro_to_compute.ipynb index f210727..835f5da 100644 --- a/content/GCP/02_intro_to_compute.ipynb +++ b/content/GCP/02_intro_to_compute.ipynb @@ -20,7 +20,7 @@ "* How do I create my own computer in the cloud?\n", "\n", "**Objectives:**\n", - "* Navigate the Google Compute Engine service and terminology.\n", + "* Navigate the Google Compute Engine product and terminology.\n", "* Allocate a virtual machine in Google Compute Engine.\n", "* Choose a machine type based on the application.\n", "* Use the cost estimator for Google Compute Engine.\n", @@ -46,7 +46,7 @@ "source": [ "## Google Compute Engine\n", "\n", - "To learn more about the Google Compute Engine service we will use the web console to create, explore, and destroy a Virtual Machine. The ability to quickly create, explore, and then discard resources in the web-console is a powerful tool to learn more about a service. After an initial exploration with the web-console, programmatic access using scripts or configuration management systems should be used.\n", + "To learn more about the Google Compute Engine product we will use the web console to create, explore, and destroy a Virtual Machine. The ability to quickly create, explore, and then discard resources in the web-console is a powerful tool to learn more about a product. After an initial exploration with the web-console, programmatic access using scripts or configuration management systems should be used.\n", "\n", "Unfortunately, the terminology used for cloud computing differs from one commercial cloud provider to another. Google Compute Engine uses the term **VM instance** to refer to a running virtual machine, **image** for the boot disk containing the operating system, and **disk** for the writable storage used for a running *VM Instance*.\n", "\n", @@ -62,7 +62,7 @@ "source": [ "## Allocate a VM Instance\n", "\n", - "We will first create an *VM instance* with defaults to explore the Google Compute Engine service.\n", + "We will first create an *VM instance* with defaults to explore the Google Compute Engine product.\n", "\n", "To create a VM Instance we do the following:\n", " * Click **Navigation Menu** -> **Compute Engine** (under Compute) -> **VM Instances** -> **+Create Instance** (just under the blue bar) to open the *Create an instance* page.\n", @@ -99,7 +99,7 @@ "source": [ "## More on Security (Optional)\n", "\n", - "Everything in the cloud requires permission (authorization). Ordinary we would configure and check security first but in the case of exploring services it is often easier to do things out of order. We noted that the *VM instance* was created with the *Compute Engine default service account*, and if the \"Allow full access to all Cloud Api's\" scope is enable, then everyone on the VM has access to all the resources in your project.\n", + "Everything in the cloud requires permission (authorization). Ordinary we would configure and check security first but in the case of exploring products it is often easier to do things out of order. We noted that the *VM instance* was created with the *Compute Engine default service account*, and if the \"Allow full access to all Cloud Api's\" scope is enable, then everyone on the VM has access to all the resources in your project.\n", "\n", "In the case of Drew, this is useful since they will be storing results of the analysis in Cloud Storage and the VM that will be doing the processing will need to have access to the storage. This is the mechanism that allows this.\n", "\n", @@ -113,9 +113,9 @@ "\n", "There are three important pieces of information that work together to form the **IAM policy**. The permission (role), the identity (principal or member), and the resource (project).\n", "\n", - "There is one additional tool that is used, **scope**. Scope describes the services that are accessible by an identity and is a simple way of limiting access to services. \n", + "There is one additional tool that is used, **scope**. Scope describes the products that are accessible by an identity and is a simple way of limiting access to products. \n", "\n", - "When we previously created the virtual machine we selected the default **scope**, which limits what services the virtual machine has access to. In other words, these scopes can only *limit* what a virtual machine instance can do, it can not add any permissions that are not already granted to the service account through IAM. In general, access should be managed through IAM policy, not scope.\n" + "When we previously created the virtual machine we selected the default **scope**, which limits what products the virtual machine has access to. In other words, these scopes can only *limit* what a virtual machine instance can do, it can not add any permissions that are not already granted to the service account through IAM. In general, access should be managed through IAM policy, not scope.\n" ] }, { @@ -308,7 +308,7 @@ "\n", "Did you \"Follow\" the VM instance by looking at the **activity** page as discussed above?\n", "\n", - "Since we care about paying for resources we are not using we review our project by visiting the *compute engine* service and reviewing that we no longer have any *VM instances* running. \n", + "Since we care about paying for resources we are not using we review our project by visiting the *compute engine* product and reviewing that we no longer have any *VM instances* running. \n", " * Go to **Navigation Menu** -> **Compute Engine** (under Compute) -> **Instances** and look for your virtual machine. It should be gone!\n", "\n", "In a later episode we will show how to easily list all the resources in a project." From 5fdc9cb99f3fbdde15809dea58e36b084e9a0e55 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Mon, 2 May 2022 22:46:44 +0000 Subject: [PATCH 04/21] GCP: Make copy/paste of config easy. --- content/GCP/03_intro_to_cloud_storage.ipynb | 2 +- content/GCP/04_intro_to_cli.ipynb | 85 +++++++++++++++++++ content/GCP/05_cli_storage.ipynb | 92 ++++++--------------- 3 files changed, 113 insertions(+), 66 deletions(-) diff --git a/content/GCP/03_intro_to_cloud_storage.ipynb b/content/GCP/03_intro_to_cloud_storage.ipynb index a8e3028..6a3d745 100644 --- a/content/GCP/03_intro_to_cloud_storage.ipynb +++ b/content/GCP/03_intro_to_cloud_storage.ipynb @@ -32,7 +32,7 @@ "id": "9897048a-6aa8-4d85-a557-d85b802f3f1d", "metadata": {}, "source": [ - "There are many storage services in the cloud. One of the most common and economic ways to store data in the cloud is to use object storage. In GCP object storage is called *Google Cloud Storage*, which is similar to the Simple Storage Service, also known as S3, on Amazon Web Services (AWS). For object storage, information is stored as a collection of key-value pairs. This is different to how data is commonly stored on laptops and high performance computing clusters (supercomputers)." + "There are many storage products and services in the cloud. One of the most common and economic ways to store data in the cloud is to use object storage. In GCP object storage is called *Google Cloud Storage*, which is similar to the Simple Storage Service, also known as S3, on Amazon Web Services (AWS). For object storage, information is stored as a collection of key-value pairs. This is different to how data is commonly stored on laptops and high performance computing clusters (supercomputers)." ] }, { diff --git a/content/GCP/04_intro_to_cli.ipynb b/content/GCP/04_intro_to_cli.ipynb index 957463e..f8b8a16 100644 --- a/content/GCP/04_intro_to_cli.ipynb +++ b/content/GCP/04_intro_to_cli.ipynb @@ -458,6 +458,91 @@ "```" ] }, + { + "cell_type": "markdown", + "id": "4ba1b3a1-15fc-40f3-ad7e-f260a85ce0a3", + "metadata": {}, + "source": [ + "### Naming Resources\n", + "\n", + "Many times we will create resources (which have names) that we will need to use later. In the next episode we will be creating a *Cloud Storage* bucket (a resource). Bucket names are globally unique, so here we use \"essentials\" with your Cloud Shell username (the username part of the Google Account) as a prefix to name the bucket something unique and easy to understand where it came from." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "247a515d-04ed-4dd1-bd7b-aa52df948ce8", + "metadata": {}, + "outputs": [], + "source": [ + "export BUCKET=\"essentials-$USER-$(date +%F)\"" + ] + }, + { + "cell_type": "markdown", + "id": "17a58166-e9e2-419d-9a3c-5ce746e0bf8e", + "metadata": {}, + "source": [ + "As usual, we will verify that it was set correctly." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "13a99343-4de3-436b-9f45-6b4f4eff4895", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "essentials-learner-2022-05-02\n" + ] + } + ], + "source": [ + "echo $BUCKET" + ] + }, + { + "cell_type": "markdown", + "id": "bde1ca1b-5904-4aa2-92ac-a31185d42d35", + "metadata": {}, + "source": [ + "## Environment Configuration\n", + "\n", + "We will use what we just learned to get ready for the next episode by configuring the environment in one step. These commands can be included in your scripts, however, we will be simply copy and pasting them in the Cloud Shell for the remainder of the lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "95ac29b1-2bf0-49e8-a409-dff8f77b754f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Account: 998995103712-compute@developer.gserviceaccount.com Project: essentials-learner Bucket: essentials-learner-2022-05-02\n" + ] + } + ], + "source": [ + "PROJECT=$(gcloud config get-value project)\n", + "ACCOUNT=$(gcloud config get-value account)\n", + "BUCKET=\"essentials-$USER-$(date +%F)\"\n", + "echo \"Account: $ACCOUNT Project: $PROJECT Bucket: $BUCKET\"" + ] + }, + { + "cell_type": "markdown", + "id": "24cf2c5f-742c-4b00-9f3a-05251a8889fb", + "metadata": {}, + "source": [ + "You must verify the output since this will be the \"Who, Where, and What\" of what you are doing." + ] + }, { "cell_type": "markdown", "id": "bda44ee1-337a-447d-8377-e8f7ae563316", diff --git a/content/GCP/05_cli_storage.ipynb b/content/GCP/05_cli_storage.ipynb index 878850e..d1c3281 100644 --- a/content/GCP/05_cli_storage.ipynb +++ b/content/GCP/05_cli_storage.ipynb @@ -40,7 +40,7 @@ "source": [ "## Configuration\n", "\n", - "It is important to verify the Account and Project information every time you start interacting with the cloud. We also use this opportunity to set the configuration environment variables (`PROJECT`) for the Episode.\n" + "We will use what we learned in the previous episode to set the configuration by entering the commands below. Remember, it is important to verify the Account and Project information every time you start interacting with the cloud. " ] }, { @@ -53,70 +53,27 @@ "name": "stdout", "output_type": "stream", "text": [ - "Your active configuration is: [cloudshell-27767]\n", - "learner@class.internet2.edu\n" + "Account: 998995103712-compute@developer.gserviceaccount.com Project: essentials-learner Bucket: essentials-learner-2022-05-02\n" ] } ], "source": [ - "gcloud config get-value account" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "9db0f3ca-2402-4002-b9d3-e634580e8f7f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your active configuration is: [cloudshell-27767]\n", - "essentials-learner\n" - ] - } - ], - "source": [ - "gcloud config get-value project" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "44f0b255-508a-4488-abde-87aae67cd5b3", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your active configuration is: [cloudshell-27767]\n", - "learner@class.internet2.edu\n" - ] - } - ], - "source": [ - "ACCOUNT=$(gcloud config get-value account) ; echo $ACCOUNT" + "PROJECT=$(gcloud config get-value project)\n", + "ACCOUNT=$(gcloud config get-value account)\n", + "BUCKET=\"essentials-$USER-$(date +%F)\"\n", + "echo \"Account: $ACCOUNT Project: $PROJECT Bucket: $BUCKET\"" ] }, { - "cell_type": "code", - "execution_count": 4, - "id": "36fcc48b-8a5b-4158-9704-f1ea7c9951eb", + "cell_type": "markdown", + "id": "0727548c-bb05-4664-8ed5-cc33ba1b8021", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Your active configuration is: [cloudshell-27767]\n", - "essentials-learner\n" - ] - } - ], "source": [ - "PROJECT=$(gcloud config get-value project) ; echo $PROJECT" + "```{admonition} Top\n", + ":class: tip\n", + "\n", + "If you need to setup a new Cloud Shell you can copy and paste the above commands into the new shell.\n", + "```" ] }, { @@ -126,7 +83,7 @@ "source": [ "## Create a Bucket\n", "\n", - "We will first make a new bucket (mb) with mostly default values. We will explore the newly created bucket with default values then immediately destroy it. This is a typical pattern when learning a new service by reducing chances to make a mistake (errors can be hard to understand). In most cases resources should not be created with all default values. We will re-create the bucket in the next section with more sensible values. " + "We will first make a new bucket (mb) with the default values. We will explore the newly created bucket with default values then immediately destroy it. This is a typical pattern when learning a new product by reducing chances to make a mistake (errors can be hard to understand). In most cases resources should not be created with all default values. We will re-create the bucket in the next section with more sensible values. " ] }, { @@ -134,12 +91,12 @@ "id": "658e1324", "metadata": {}, "source": [ - "We first generate a bucket name and store it in an environment variable for future use. Bucket names are globally unique, so here we use \"essentials\" with your Cloud Shell username (the username part of the Google Account) as a prefix to name the bucket something unique and easy to understand where it came from." + "We first verify that `$BUCKET` is set correctly." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "id": "255eb914-a06a-4bfd-adbb-7ca2f94678e7", "metadata": {}, "outputs": [ @@ -147,15 +104,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "essentials-learner-2022-02-03\n" + "essentials-learner-2022-05-02\n" ] } ], "source": [ - "BUCKET=\"essentials-$USER-$(date +%F)\"\n", "echo $BUCKET" ] }, + { + "cell_type": "markdown", + "id": "9a5789df-ed6b-44a5-8f06-7937c62d6035", + "metadata": {}, + "source": [ + "And now we create the bucket. Note that most times we must use `gs://` to indicate that it is a bucket. " + ] + }, { "cell_type": "code", "execution_count": 6, @@ -179,9 +143,7 @@ "id": "42584633-f77f-43b4-bb23-49ae4364af07", "metadata": {}, "source": [ - "If the bucket creation fails with a \"ServiceException: 409 A Cloud Storage bucket named ... already exists.\" it means that the name is not unique or you have already created the bucket. You will need to either delete the bucket or choose another name.\n", - "\n", - "*Advanced Note: Bucket creation may fail if you are not using the Cloud Shell and the machine you are using has generic account name such as `pi`, `admin`, or other standard username. If this is the case just set `BUCKET` to some unique value.*" + "If the bucket creation fails with a \"ServiceException: 409 A Cloud Storage bucket named ... already exists.\" it means that the name is not unique or you have already created the bucket. You will need to either delete the bucket or choose another name." ] }, { @@ -191,7 +153,7 @@ "source": [ "## Show the Bucket\n", "\n", - "We will now list (Enumerate) the resource to verify that the resource (bucket) has been created by using the `gsutil ls` command to list all the buckets." + "We will now list all the buckets (resources) to verify that the bucket has been created by using the `gsutil ls` command." ] }, { From e6276b5a0394b162a64c1a34195f60104d4a27ad Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Tue, 3 May 2022 22:13:55 +0000 Subject: [PATCH 05/21] Fix exercise class --- content/GCP/01_intro_to_cloud_console.ipynb | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index b5e4872..03ccc02 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -65,6 +65,7 @@ }, "source": [ "```{admonition} Exercise\n", + ":class: exercise\n", "\n", "Take a few moments to ask yourself the following questions:\n", " * What account are you currently using in the Google Cloud web console?\n", @@ -105,6 +106,7 @@ "metadata": {}, "source": [ "```{admonition} Exercise\n", + ":class: exercise\n", "\n", "Take a few moments to ask yourself the following questions:\n", " * What is the *name* of the Project you are currently using in the Google Cloud Platform web console?\n", @@ -158,7 +160,6 @@ }, "source": [ "```{admonition} Exercise\n", - "\n", ":class: exercise\n", "\n", "Take a few moments to navigate a few key products.\n", @@ -254,6 +255,7 @@ }, "source": [ "```{admonition} Exercise\n", + ":class: exercise\n", "\n", "Before we move on, do the following:\n", "* Double check that you are in the correct account and project that you will be using for this lesson.\n", @@ -262,14 +264,6 @@ " * Why is this important?\n", "```" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7756956a-c778-4fec-acc1-2de9e96266b3", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From a945c51dfdb67088eae0bb28114216235faaa27a Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Wed, 4 May 2022 15:47:29 +0000 Subject: [PATCH 06/21] GCP: Clean up introduction order. --- content/GCP/01_intro_to_cloud_console.ipynb | 82 ++++++++++---------- content/GCP/img/enable-compute-api.png | Bin 0 -> 37090 bytes 2 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 content/GCP/img/enable-compute-api.png diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index 03ccc02..2648c8f 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -17,13 +17,14 @@ "**Exercises:** 6 min.\n", "\n", "**Questions:**\n", - "* How do I find things in the web console?\n", - "* How do I access the cloud through the command line?\n", + " * How do I find things in the web console?\n", + " * How do I access the cloud through the command line?\n", "\n", "**Objectives:**\n", - "* Login to the Google Cloud web console\n", - "* Find and verify important information about your cloud environment.\n", - "* Find and open the Cloud Shell\n", + " * Login to the Google Cloud web console\n", + " * Find and verify important information about your cloud environment.\n", + " * Learn important Google Cloud terminology\n", + " * Find and open the Cloud Shell\n", "```" ] }, @@ -68,9 +69,9 @@ ":class: exercise\n", "\n", "Take a few moments to ask yourself the following questions:\n", - " * What account are you currently using in the Google Cloud web console?\n", - " * Are you logged into any other accounts?\n", - " * How do you know which account is being used?\n", + " * What account are you currently using in the Google Cloud web console?\n", + " * Are you logged into any other accounts?\n", + " * How do you know which account is being used?\n", " \n", " If you are not currently using the correct account, switch to it.\n", "```" @@ -139,19 +140,6 @@ "All the different products and resources are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " ] }, - { - "cell_type": "markdown", - "id": "b87ee733-aed7-452d-96a0-0a07d34e76ec", - "metadata": {}, - "source": [ - "```{admonition} Tip\n", - ":class: tip\n", - "\n", - "The web console is used to control and observe the cloud from the browser. It should only be used for simple and one-time tasks, setting up basic resources exploring new products, accessing documentation, or for monitoring and debugging resources in the cloud. Programmatic control through the console, programming languages (for example Python), and other automation tools should be used for day to day activities to make the most out of the cloud and to help with the reproducibility of research and teaching.\n", - "\n", - "```" - ] - }, { "cell_type": "markdown", "id": "d47d160b", @@ -159,36 +147,26 @@ "tags": [] }, "source": [ + "*Instructor: place instructions on the screen*\n", + "\n", "```{admonition} Exercise\n", ":class: exercise\n", "\n", - "Take a few moments to navigate a few key products.\n", - " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", - " * You will probably need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", - " * Navigate to the \"Compute Engine\" product under the \"Compute\" product group and enable the product if necessary.\n", + "Take a few moments to navigate to a few key products and enable them.\n", + " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", + " * You will need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", + " * Navigate to the \"Compute Engine\" product under the \"Compute\" product group and enable the product as well.\n", "```" ] }, { "cell_type": "markdown", - "id": "9470567b-9966-4c07-a7ad-a94358530480", - "metadata": { - "tags": [] - }, + "id": "146358ca-d9a6-4ab5-856f-509818e6d63d", + "metadata": {}, "source": [ - "## Putting it Together\n", - "\n", - "Now that we have the basics, we can provide a bit larger picture of the cloud and all the pieces:\n", + "Enable an API by clicking the \"ENABLE\" button as shown below.\n", "\n", - "![gcp-overview](img/CLASS-Essentials-GCP-Overview.svg)\n", - "\n", - " * Project - a container to house and manage resources.\n", - " * Products - The different types of resources or services within Google Cloud.\n", - " * Resources - individual products running or stored within Google cloud such as compute, storage, networking, databases, etc. Resources can belong to only one Project.\n", - " * Billing Account - used to pay for resources and services consumed. Each project has only one billing account.\n", - " * Account - the identity that is used to accesses resources within Google Cloud. Note: this is *NOT* the Billing Account.\n", - " * Identity Access and Management (IAM) - manages access (permissions) to a resource by an account (also referred to as a principal).\n", - " * Organization - projects may optionally be housed in an organization (arranged in folders), which can add permissions and restrictions in a hierarchical manner. Projects can only belong to one Organization." + "![enable-compute-api](img/enable-compute-api.png)" ] }, { @@ -220,6 +198,28 @@ " 9. Google Account (avatar at the far right) - verify and switch accounts." ] }, + { + "cell_type": "markdown", + "id": "9470567b-9966-4c07-a7ad-a94358530480", + "metadata": { + "tags": [] + }, + "source": [ + "## Putting it Together\n", + "\n", + "Now that we have the basics, we can provide a bit larger picture of the cloud and all the pieces:\n", + "\n", + "![gcp-overview](img/CLASS-Essentials-GCP-Overview.svg)\n", + "\n", + " * Project - a container to house and manage resources.\n", + " * Products - The different types of resources or services within Google Cloud.\n", + " * Resources - individual products running or stored within Google cloud such as compute, storage, networking, databases, etc. Resources can belong to only one Project.\n", + " * Billing Account - used to pay for resources and services consumed. Each project has only one billing account.\n", + " * Account - the identity that is used to accesses resources within Google Cloud. Note: this is *NOT* the Billing Account.\n", + " * Identity Access and Management (IAM) - manages access (permissions) to a resource by an account (also referred to as a principal).\n", + " * Organization - projects may optionally be housed in an organization (arranged in folders), which can add permissions and restrictions in a hierarchical manner. Projects can only belong to one Organization." + ] + }, { "cell_type": "markdown", "id": "50fddb1f-c826-412c-bb3c-127fee6b4949", diff --git a/content/GCP/img/enable-compute-api.png b/content/GCP/img/enable-compute-api.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3cebb9efb5f8b65a6c4979988b1926c950f8ec GIT binary patch literal 37090 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 literal 0 HcmV?d00001 From 9dcb7cc6e2fd8342cd5f9fbfc6d5e4c0652839c7 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Wed, 4 May 2022 22:11:32 +0000 Subject: [PATCH 07/21] GCP: Clean up introduction. --- content/GCP/01_intro_to_cloud_console.ipynb | 61 +++++++++------------ 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index 2648c8f..44baeb2 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -135,8 +135,11 @@ "\n", " * Click on a product to navigate the product page\n", " * You can pin frequently used items on the top of this page by clicking on the pin icon. \n", + " * A product is accessed and controlled via an API and usually must be enabled (once per project). To enable a product API click on the \"ENABLE\" button shown below.\n", " * Click the hamburger again to hide the Left Sidebar.\n", "\n", + "![enable-compute-api](img/enable-compute-api.png)\n", + "\n", "All the different products and resources are the \"**What**\" of the cloud. We will start with compute, called *Google Compute Engine* in the next Episode. " ] }, @@ -149,26 +152,16 @@ "source": [ "*Instructor: place instructions on the screen*\n", "\n", - "```{admonition} Exercise\n", + "```{admonition} Exercise 1\n", ":class: exercise\n", "\n", "Take a few moments to navigate to a few key products and enable them.\n", " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", - " * You will need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", + " * You may need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", " * Navigate to the \"Compute Engine\" product under the \"Compute\" product group and enable the product as well.\n", "```" ] }, - { - "cell_type": "markdown", - "id": "146358ca-d9a6-4ab5-856f-509818e6d63d", - "metadata": {}, - "source": [ - "Enable an API by clicking the \"ENABLE\" button as shown below.\n", - "\n", - "![enable-compute-api](img/enable-compute-api.png)" - ] - }, { "cell_type": "markdown", "id": "e955eb3a-4fdc-448b-aef8-ed1dbe2a73d9", @@ -198,28 +191,6 @@ " 9. Google Account (avatar at the far right) - verify and switch accounts." ] }, - { - "cell_type": "markdown", - "id": "9470567b-9966-4c07-a7ad-a94358530480", - "metadata": { - "tags": [] - }, - "source": [ - "## Putting it Together\n", - "\n", - "Now that we have the basics, we can provide a bit larger picture of the cloud and all the pieces:\n", - "\n", - "![gcp-overview](img/CLASS-Essentials-GCP-Overview.svg)\n", - "\n", - " * Project - a container to house and manage resources.\n", - " * Products - The different types of resources or services within Google Cloud.\n", - " * Resources - individual products running or stored within Google cloud such as compute, storage, networking, databases, etc. Resources can belong to only one Project.\n", - " * Billing Account - used to pay for resources and services consumed. Each project has only one billing account.\n", - " * Account - the identity that is used to accesses resources within Google Cloud. Note: this is *NOT* the Billing Account.\n", - " * Identity Access and Management (IAM) - manages access (permissions) to a resource by an account (also referred to as a principal).\n", - " * Organization - projects may optionally be housed in an organization (arranged in folders), which can add permissions and restrictions in a hierarchical manner. Projects can only belong to one Organization." - ] - }, { "cell_type": "markdown", "id": "50fddb1f-c826-412c-bb3c-127fee6b4949", @@ -247,6 +218,28 @@ " * Click the **\"Close editor\"** button (the pencil icon in the top right of the window)." ] }, + { + "cell_type": "markdown", + "id": "9470567b-9966-4c07-a7ad-a94358530480", + "metadata": { + "tags": [] + }, + "source": [ + "## Putting it Together\n", + "\n", + "Now that we have the basics, we can provide a bit larger picture of the cloud and all the pieces:\n", + "\n", + "![gcp-overview](img/CLASS-Essentials-GCP-Overview.svg)\n", + "\n", + " * Project - a container to house and manage resources.\n", + " * Products - The different types of resources or services within Google Cloud.\n", + " * Resources - individual products running or stored within Google cloud such as compute, storage, networking, databases, etc. Resources can belong to only one Project.\n", + " * Billing Account - used to pay for resources and services consumed. Each project has only one billing account.\n", + " * Account - the identity that is used to accesses resources within Google Cloud. Note: this is *NOT* the Billing Account.\n", + " * Identity Access and Management (IAM) - manages access (permissions) to a resource by an account (also referred to as a principal).\n", + " * Organization - projects may optionally be housed in an organization (arranged in folders), which can add permissions and restrictions in a hierarchical manner. Projects can only belong to one Organization." + ] + }, { "cell_type": "markdown", "id": "118254c6-a5d9-4bd0-8a0f-64d4f72b3cf0", From f4d1982c63e7a3a7b738ef29b2e5fad8d1514c07 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Thu, 5 May 2022 21:13:03 +0000 Subject: [PATCH 08/21] GCP: Cleanup Compute. --- content/GCP/02_intro_to_compute.ipynb | 43 +++++++++++++++++---------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/content/GCP/02_intro_to_compute.ipynb b/content/GCP/02_intro_to_compute.ipynb index 835f5da..7bba235 100644 --- a/content/GCP/02_intro_to_compute.ipynb +++ b/content/GCP/02_intro_to_compute.ipynb @@ -17,15 +17,15 @@ "**Exercises:** 6 min\n", "\n", "**Questions:**\n", - "* How do I create my own computer in the cloud?\n", + " * How do I create my own computer in the cloud?\n", "\n", "**Objectives:**\n", - "* Navigate the Google Compute Engine product and terminology.\n", - "* Allocate a virtual machine in Google Compute Engine.\n", - "* Choose a machine type based on the application.\n", - "* Use the cost estimator for Google Compute Engine.\n", - "* Learn what a service account is and how they are used.\n", - "* Learn how to connect to a virtual machine using ssh in the Cloud Shell with the web console.\n", + " * Navigate the Google Compute Engine product and terminology.\n", + " * Allocate a virtual machine in Google Compute Engine.\n", + " * Choose a machine type based on the application.\n", + " * Use the cost estimator for Google Compute Engine.\n", + " * Learn what a service account is and how they are used.\n", + " * Learn how to connect to a virtual machine using ssh in the Cloud Shell with the web console.\n", "```" ] }, @@ -55,7 +55,7 @@ }, { "cell_type": "markdown", - "id": "c5430b40-1a5f-40df-9e13-529ef3ece4ce", + "id": "05f4a1dd-79eb-49bc-a52e-98e2b77c6ade", "metadata": { "tags": [] }, @@ -76,9 +76,7 @@ " * In the **Identity and API access** section note that for the **Service Accounts** -> **Service account** option that the **Compute Engine default service account** is selected. This allows the *VM Instance* to access resources in the project. Note: the *\"Allow full access to all Cloud APIs\"* allows *everyone* on the VM to *access and edit all resources in the project*.\n", " * Leave the remaining options as default.\n", " * Note the **Monthly estimate** in the right side panel. This is only for running the *VM instance* and does not include other storage, networking, compute, and other charges that may occur by running software. Click **Details** show a breakdown of the *VM instance* only costs.\n", - "![compute-create-instance](img/compute-create-instance.png) \n", - " * Finally, click **Create** to create the *VM Instance* (allocate the resource).\n", - "![compute-create-instance-ok](img/compute-create-instance-ok.png)\n" + "![compute-create-instance](img/compute-create-instance.png) " ] }, { @@ -87,11 +85,25 @@ "metadata": {}, "source": [ "```{admonition} Exercise\n", - "* Find the most expensive VM. **DO NOT actually create! Just cancel!**\n", - "* Find the least expensive VM.\n", + ":class: exercise\n", + "\n", + " * Find the most expensive VM. **DO NOT actually create!**\n", + " * Find the least expensive VM.\n", + " * Select `e2-medium`\n", "```" ] }, + { + "cell_type": "markdown", + "id": "92263998-5a0b-4e37-9fc6-605f666309ac", + "metadata": { + "tags": [] + }, + "source": [ + " * Finally, click **Create** to create the *VM Instance* (allocate the resource).\n", + "![compute-create-instance-ok](img/compute-create-instance-ok.png)" + ] + }, { "cell_type": "markdown", "id": "41c63432-a614-4a1e-9967-f49b68f9069e", @@ -286,9 +298,10 @@ "Now that we have made that clear, we will now complete the resource life-cycle by deleting the *VM Instance* we just created. First, try to do this on your own.\n", "\n", "```{admonition} Exercise\n", + ":class: exercise\n", "\n", - "* Try to delete the ***VM instance*** on your own\n", - "* Try to follow the process we just learned (hint: *track* and *list*)\n", + " * Try to delete the ***VM instance*** on your own\n", + " * Try to follow the process we just learned (hint: *track* and *list*)\n", "```" ] }, From 5bdf68503ca37cbda0d63e15067137fd91f01efd Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Thu, 5 May 2022 21:49:08 +0000 Subject: [PATCH 09/21] GCP: Cleanup storage. --- content/GCP/03_intro_to_cloud_storage.ipynb | 31 ++++++++++++++------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/content/GCP/03_intro_to_cloud_storage.ipynb b/content/GCP/03_intro_to_cloud_storage.ipynb index 6a3d745..87c0ecc 100644 --- a/content/GCP/03_intro_to_cloud_storage.ipynb +++ b/content/GCP/03_intro_to_cloud_storage.ipynb @@ -15,24 +15,34 @@ "**Exercises:** 5 min\n", "\n", "**Questions:**\n", - "* How do I store data in the cloud?\n", + " * How do I store data in the cloud?\n", "\n", "**Objectives:**\n", - "* Navigate the Google Cloud Storage service and terminology\n", - "* Allocate storage in Google Cloud Storage\n", - "* Find the cost estimator for Google Cloud Storage\n", - "* Recognize that resources have a \"location\"\n", - "* Recognize danger of public access\n", - "* De-allocate Google Cloud Storage storage\n", + " * Navigate the Google Cloud Storage service and terminology\n", + " * Allocate storage in Google Cloud Storage\n", + " * Find the cost estimator for Google Cloud Storage\n", + " * Recognize that resources have a \"location\"\n", + " * Recognize danger of public access\n", + " * De-allocate Google Cloud Storage storage\n", "```" ] }, + { + "cell_type": "markdown", + "id": "9358d09a-8eb9-4b6e-bd27-16f1beab6c0c", + "metadata": {}, + "source": [ + "Now that Drew has a basic handle on how to create a virtual machine instance and has played around with it they are now ready to figure out where to store the data. Drew was advised that for storing and sharing data outside a virtual machine instance that Object storage is the first thing to try." + ] + }, { "cell_type": "markdown", "id": "9897048a-6aa8-4d85-a557-d85b802f3f1d", "metadata": {}, "source": [ - "There are many storage products and services in the cloud. One of the most common and economic ways to store data in the cloud is to use object storage. In GCP object storage is called *Google Cloud Storage*, which is similar to the Simple Storage Service, also known as S3, on Amazon Web Services (AWS). For object storage, information is stored as a collection of key-value pairs. This is different to how data is commonly stored on laptops and high performance computing clusters (supercomputers)." + "## Storage\n", + "\n", + "There are many storage products and services in the cloud. One of the most common and economic ways to store data in the cloud is to use object storage. In GCP object storage is called *Google Cloud Storage*, which is similar to the Simple Storage Service, also known as S3, on Amazon Web Services (AWS). For object storage, information is stored as a collection of key-value pairs. This is different to how data is commonly stored on laptops and high performance computing clusters (supercomputers)." ] }, { @@ -167,9 +177,10 @@ "We will now complete the resource life-cycle by deleting the bucket we just created. Think about the process we did for creating the bucket and follow a similar one.\n", "\n", "```{admonition} Exercise\n", + ":class: exercise\n", "\n", - " * Try to delete the storage bucket on your own\n", - " * Verify that the storage bucket has been deleted.\n", + " * Try to delete the storage bucket on your own\n", + " * Verify that the storage bucket has been deleted.\n", "```" ] }, From 96ed1d20b91dfd55193d0d6f22ab3c0c64ddae4d Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Thu, 5 May 2022 22:25:36 +0000 Subject: [PATCH 10/21] GCP: Cleanup cli. --- content/GCP/04_intro_to_cli.ipynb | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/content/GCP/04_intro_to_cli.ipynb b/content/GCP/04_intro_to_cli.ipynb index f8b8a16..7ef7348 100644 --- a/content/GCP/04_intro_to_cli.ipynb +++ b/content/GCP/04_intro_to_cli.ipynb @@ -15,15 +15,15 @@ "**Exercises:** 5 min\n", "\n", "**Questions:**\n", - "* How do I use the Cloud CLI?\n", - "* How do I use `gcloud`?\n", + " * How do I use the Cloud CLI?\n", + " * How do I use `gcloud`?\n", "\n", "**Objectives:**\n", - "* Find and use the \"Cloud Shell\" in the web console.\n", - "* Use basic cloud CLI commands (`gcloud` and `gsutil`).\n", - "* Verify basic settings.\n", - "* Use environment variables for configuration.\n", - "* Understand the importance of using variables reproducibility and automation.\n", + " * Find and use the \"Cloud Shell\" in the web console.\n", + " * Use basic cloud CLI commands (`gcloud` and `gsutil`).\n", + " * Verify basic settings.\n", + " * Use environment variables for configuration.\n", + " * Understand the importance of using variables reproducibility and automation.\n", "``` " ] }, @@ -147,6 +147,17 @@ "gcloud config get-value project" ] }, + { + "cell_type": "markdown", + "id": "379aa938-04e0-4663-b402-e79b03b474da", + "metadata": {}, + "source": [ + "We will first use the `gsutil` command, which is similar to `gcloud` but older but more comprehensive. We will first check to see if the command working by showing the help by issuing the following command:\n", + "```\n", + "gcloud help\n", + "```" + ] + }, { "cell_type": "markdown", "id": "1389ca4f-7234-4ea3-9ad8-85914d88ede5", @@ -452,9 +463,10 @@ "metadata": {}, "source": [ "```{admonition} Exercise\n", + ":class: exercise\n", "\n", - " * What command shows the account? (hint: we used it already)\n", - " * Set the `ACCOUNT` environment variable with the correct value. (hint: be careful with punctuation (single and double quotes) and matching brackets and punctuation)\n", + " * What command shows the account? (hint: we used it already)\n", + " * Set the `ACCOUNT` environment variable with the correct value. (hint: be careful with punctuation (single and double quotes) and matching brackets and punctuation)\n", "```" ] }, From 860af32f3873f572684bf3ca598e83ecf33f5857 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 6 May 2022 17:03:33 +0000 Subject: [PATCH 11/21] GCP: Cleanup CLI storage. --- content/GCP/05_cli_storage.ipynb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/content/GCP/05_cli_storage.ipynb b/content/GCP/05_cli_storage.ipynb index d1c3281..b643e0c 100644 --- a/content/GCP/05_cli_storage.ipynb +++ b/content/GCP/05_cli_storage.ipynb @@ -16,12 +16,12 @@ "**Exercises:** 2 min\n", "\n", "**Questions:**\n", - "* How do I store data in a Bucket?\n", + " * How do I store data in a Bucket?\n", "\n", "**Objectives:**\n", - "* Manage buckets using the command line.\n", - "* Create a bucket with a sensible configuration.\n", - "* Learn to manage data (add, list, retrieve, delete) in a bucket using the command line.\n", + " * Manage buckets using the command line.\n", + " * Create a bucket with a sensible configuration.\n", + " * Learn to manage data (add, list, retrieve, delete) in a bucket using the command line.\n", "```\n" ] }, @@ -602,7 +602,7 @@ } ], "source": [ - "gsutil ls \"gs://$BUCKET\"" + "gsutil ls gs://$BUCKET" ] }, { @@ -611,8 +611,9 @@ "metadata": {}, "source": [ "```{admonition} Exercise\n", + ":class: exercise\n", "\n", - "* Display the object with the date in the bucket.\n", + " * Display the object with the date in the bucket.\n", "```" ] }, From 417649b7fe83c9fdcc11652fcb80b25252a8404a Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 6 May 2022 20:35:34 +0000 Subject: [PATCH 12/21] GCP: Cleanup analysis. Start using colon fences. --- content/GCP/06_running_analysis.ipynb | 107 ++++++++++++++++---------- content/_config.yml | 1 + 2 files changed, 69 insertions(+), 39 deletions(-) diff --git a/content/GCP/06_running_analysis.ipynb b/content/GCP/06_running_analysis.ipynb index 5a725e7..7d6e0f4 100644 --- a/content/GCP/06_running_analysis.ipynb +++ b/content/GCP/06_running_analysis.ipynb @@ -7,7 +7,7 @@ "source": [ "# Putting It All Together\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 60 min\n", @@ -15,21 +15,21 @@ "**Exercises:** 8 min\n", "\n", "**Questions:**\n", - " * Can you show me an example?\n", + " * Can you show me an example?\n", "\n", "**Objectives:**\n", - " * Create a simple workflow using a cloud VM and cloud object storage.\n", - " * Update a VM Instance software for important security updates.\n", - " * Create a VM Instance with the appropriate storage scope.\n", - " * Create a private regional storage bucket with appropriate security settings.\n", - " * Using the CLI to install software.\n", - " * Download source code using git\n", - " * Retrieve data from a bucket\n", - " * Run the python analysis code\n", - " * Store results in a bucket\n", - " * View the results in the Cloud Storage browser.\n", + " * Create a simple workflow using a cloud VM and cloud object storage.\n", + " * Update a VM Instance software for important security updates.\n", + " * Create a VM Instance with the appropriate storage scope.\n", + " * Create a private regional storage bucket with appropriate security settings.\n", + " * Using the CLI to install software.\n", + " * Download source code using git\n", + " * Retrieve data from a bucket\n", + " * Run the python analysis code\n", + " * Store results in a bucket\n", + " * View the results in the Cloud Storage browser.\n", "\n", - "```" + ":::" ] }, { @@ -42,6 +42,23 @@ "Drew needs to do some analysis on the data. They need data (satellite images stored in the cloud), computational resources (a virtual machine), some software (we will supply this), and a place to store the results (Cloud Storage). We will assemble and process all these parts in the cloud with a simple example.\n" ] }, + { + "cell_type": "markdown", + "id": "03938799-181e-4755-961d-e2f837af7db7", + "metadata": {}, + "source": [ + ":::{tip}\n", + "\n", + "If you get disconnected, you will need to reconnect to the virtual machine (`gcloud compute ssh essentials`) and re-run the following commands:\n", + "```\n", + "BUCKET=\"essentials-$USER-$(date +%F)\"\n", + "REGION=\"us-west2\"\n", + "echo \"bucket: $BUCKET region: $REGION\"\n", + "cd ~/CLASS-Examples/landsat\n", + "```\n", + ":::" + ] + }, { "cell_type": "markdown", "id": "245ffbcb-bf77-4ad1-8bde-1c7d2717ab46", @@ -54,29 +71,37 @@ "We will do this as an exercise to give you practice in creating resources. Since the virtual machine will need access to storage on your behalf, you will need to change the **access scope** to give **Full** access to the **Storage** API to the virtual machine." ] }, + { + "cell_type": "markdown", + "id": "276d6d6e-5d3e-4fb7-ae4c-a70470d7af4b", + "metadata": {}, + "source": [ + "*Instructor: place the exercise instructions below on the screen*\n", + "\n", + "*When you are done feel free to connect to the virtual machine on your own for additional practice. Once everyone has created their VM we will connect to the machine as described below.*" + ] + }, { "cell_type": "markdown", "id": "45cb5d1d-c28a-4e0e-a0f3-bf68add065be", "metadata": {}, "source": [ - "````{admonition} Exercise\n", + ":::{admonition} Exercise 6\n", + ":class: exercise\n", "\n", "Using the console navigate to the \"Compute Engine\" service and create a new VM with the following properties.\n", - " * Call the VM instance \"essentials\"\n", - " * Allow the VM instance \"Full\" access to \"Storage\". This can be found under \"Identity and API\" on the \"create an instance\" page and then selecting \"Set access for each API\" and change \"Storage\" to \"Full\". **This will allow the VM to create, read, write, and delete all storage buckets in the project\"**\n", - " * Select a bit larger VM instance by changing the machine type to \"e2-standard-2\".\n", - "````" + " * Set the VM instance **name** to \"essentials\"\n", + " * Select a bit larger VM instance by changing the machine type to \"**e2-standard-2**\".\n", + " * Set the VM instance API access for \"**Storage**\" to \"**Full**\". This can be found under \"Identity and API access\" on the \"create an instance\" page and then selecting \"Set access for each API\" and change \"Storage\" to \"Full\". *This will allow the VM to create, read, write, and delete all storage buckets in the project\"*\n", + " \n", + ":::" ] }, { "cell_type": "markdown", - "id": "009fbfee-f1ce-4046-8223-0aa11b21bd61", + "id": "4bfb5021-d07d-43c2-b651-5dd6fa498620", "metadata": {}, "source": [ - "*Instructor: place the above exercise instructions on the screen*\n", - "\n", - "*When you are done feel free to connect to the virtual machine on your own for additional practice. Once everyone has created their VM we will connect to the machine as described below.*\n", - "\n", "Please verify that the virtual machine was created as above. If you are unsure delete the virtual machine instance and create it again.\n", "\n", "Verify that the **Compute Engine default service account** is being used.\n", @@ -86,8 +111,7 @@ "![compute-iam-scope-top](img/compute-iam-scope-top.png)\n", "\n", "And set **Storage** to **Full**.\n", - "![compute-iam-scope-storage-full](img/compute-iam-scope-storage-full.png)\n", - "\n" + "![compute-iam-scope-storage-full](img/compute-iam-scope-storage-full.png)" ] }, { @@ -555,14 +579,13 @@ "id": "588ddd30-af8f-4378-b543-290c4c6f0840", "metadata": {}, "source": [ - "````{admonition} Tip\n", - ":class: tip\n", - "To run the above commands in one step run\n", + "::::{tip}\n", "\n", + "To run the above commands in one step run\n", "```\n", "bash get-index.sh\n", "```\n", - "````" + "::::" ] }, { @@ -570,10 +593,12 @@ "id": "f98c38de-87fa-4e66-9d4b-186fbf81b3b2", "metadata": {}, "source": [ - "````{admonition} Break (Optional)\n", + ":::{admonition} Break (Optional)\n", + ":class: exercise\n", "\n", "Now our virtual machine instance is ready and we can access the code and data. Now is a great time to take a short break.\n", - "````" + "\n", + ":::" ] }, { @@ -822,14 +847,14 @@ "id": "0ca2e2ff-8276-4092-8a9e-ca754db5078e", "metadata": {}, "source": [ - "````{admonition} Tip\n", + "::::{admonition} Tip\n", ":class: tip\n", "To run the above analysis in one step run\n", "\n", "```\n", "bash get-data.sh\n", "```\n", - "````" + "::::" ] }, { @@ -941,7 +966,9 @@ "id": "b5a2b29b-9c1d-4376-a3eb-4a3dc4bac160", "metadata": { "scrolled": true, - "tags": [] + "tags": [ + "hide-output" + ] }, "outputs": [ { @@ -1612,11 +1639,12 @@ "id": "4de32b26-f4cb-4f33-b7d5-e3852769840a", "metadata": {}, "source": [ - "````{admonition} Exercise\n", + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", - " * Try to find and view the results on your own\n", + " * Try to find and view the results on your own\n", "\n", - "````" + ":::" ] }, { @@ -1640,11 +1668,12 @@ "\n", "We will now leave the resources running in order to learn more about sharing and monitoring costs and will clean up all the resources as the end of Lesson. \n", "\n", - "```{admonition} Danger\n", + ":::{admonition} Danger\n", ":class: danger\n", "\n", "**Do not forget to do remove the Cloud Storage Bucket and the Compute Engine Instance (Virtual Machine) when you are done with this Lesson!** Running resources and stored data costs money! Cleanup when you are done!\n", - "```" + "\n", + ":::" ] } ], diff --git a/content/_config.yml b/content/_config.yml index 0bb2c65..2d38905 100644 --- a/content/_config.yml +++ b/content/_config.yml @@ -48,3 +48,4 @@ parse: # don't forget to list any other extensions you want enabled, # including those that are enabled by default! - html_image + - colon_fence From 0ed3eaa20ea13aa8554f9569fd69f28d41c5eba3 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 6 May 2022 21:26:30 +0000 Subject: [PATCH 13/21] GCP: Minor source-code cleanup and `hide-output` --- content/GCP/01_intro_to_cloud_console.ipynb | 34 +++-- content/GCP/02_intro_to_compute.ipynb | 22 +-- content/GCP/03_intro_to_cloud_storage.ipynb | 31 ++-- content/GCP/04_intro_to_cli.ipynb | 39 +++-- content/GCP/05_cli_storage.ipynb | 26 ++-- content/GCP/06_running_analysis.ipynb | 15 +- content/GCP/06_sharing_results.ipynb | 23 +-- content/GCP/07_monitoring_costs.ipynb | 45 ++++-- content/GCP/08_cleaning_up_resources.ipynb | 154 +++++++++++++++----- 9 files changed, 261 insertions(+), 128 deletions(-) diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index 44baeb2..5485ed5 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -9,7 +9,7 @@ "source": [ "# Introduction to the GCP Cloud Console\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 15 min.\n", @@ -25,7 +25,8 @@ " * Find and verify important information about your cloud environment.\n", " * Learn important Google Cloud terminology\n", " * Find and open the Cloud Shell\n", - "```" + "\n", + ":::" ] }, { @@ -65,7 +66,7 @@ "tags": [] }, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", "Take a few moments to ask yourself the following questions:\n", @@ -74,7 +75,8 @@ " * How do you know which account is being used?\n", " \n", " If you are not currently using the correct account, switch to it.\n", - "```" + "\n", + ":::" ] }, { @@ -106,7 +108,7 @@ "id": "182e3a9a", "metadata": {}, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", "Take a few moments to ask yourself the following questions:\n", @@ -117,7 +119,8 @@ " * How do you know which project you are currently using?\n", "\n", "If you are currently not using the correct project for this lesson, switch to the correct one.\n", - "```" + "\n", + ":::" ] }, { @@ -152,14 +155,15 @@ "source": [ "*Instructor: place instructions on the screen*\n", "\n", - "```{admonition} Exercise 1\n", + ":::{admonition} Exercise 1\n", ":class: exercise\n", "\n", "Take a few moments to navigate to a few key products and enable them.\n", " * Navigate to \"Cloud Storage\" under the \"Storage\" product group.\n", " * You may need to \"Enable\" this product first by clicking on the \"Enable\" button on the \"Cloud Storage API\" page. This will only need to be done once per project.\n", " * Navigate to the \"Compute Engine\" product under the \"Compute\" product group and enable the product as well.\n", - "```" + "\n", + ":::" ] }, { @@ -247,15 +251,15 @@ "tags": [] }, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", "Before we move on, do the following:\n", - "* Double check that you are in the correct account and project that you will be using for this lesson.\n", - "* Take a moment to reflect on the \"Who, Where, and What\" of the cloud. \n", - " * What is your Who, Where, and What?\n", - " * Why is this important?\n", - "```" + " * Double check that you are in the correct account and project that you will be using for this lesson.\n", + " * Take a moment to reflect on the \"Who, Where, and What\" of the cloud. \n", + " * What is your Who, Where, and What?\n", + " * Why is this important?\n", + ":::" ] } ], @@ -275,7 +279,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.2" } }, "nbformat": 4, diff --git a/content/GCP/02_intro_to_compute.ipynb b/content/GCP/02_intro_to_compute.ipynb index 7bba235..950ef9a 100644 --- a/content/GCP/02_intro_to_compute.ipynb +++ b/content/GCP/02_intro_to_compute.ipynb @@ -9,7 +9,7 @@ "source": [ "# Introduction to Cloud Compute (Google Compute Engine)\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 30 min.\n", @@ -26,7 +26,8 @@ " * Use the cost estimator for Google Compute Engine.\n", " * Learn what a service account is and how they are used.\n", " * Learn how to connect to a virtual machine using ssh in the Cloud Shell with the web console.\n", - "```" + "\n", + ":::" ] }, { @@ -84,13 +85,14 @@ "id": "6737d8ba-e6d4-437f-a652-5d9d4477b34c", "metadata": {}, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", " * Find the most expensive VM. **DO NOT actually create!**\n", " * Find the least expensive VM.\n", " * Select `e2-medium`\n", - "```" + "\n", + ":::" ] }, { @@ -281,11 +283,12 @@ "source": [ "## Delete the VM Instance\n", "\n", - "```{admonition} Danger\n", + ":::{admonition} Danger\n", ":class: danger\n", "\n", "This will destroy the VM instance and and ALL the data in it! You cannot undelete an instance!\n", - "```" + "\n", + ":::" ] }, { @@ -297,12 +300,13 @@ "source": [ "Now that we have made that clear, we will now complete the resource life-cycle by deleting the *VM Instance* we just created. First, try to do this on your own.\n", "\n", - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", " * Try to delete the ***VM instance*** on your own\n", " * Try to follow the process we just learned (hint: *track* and *list*)\n", - "```" + "\n", + ":::" ] }, { @@ -353,7 +357,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.2" } }, "nbformat": 4, diff --git a/content/GCP/03_intro_to_cloud_storage.ipynb b/content/GCP/03_intro_to_cloud_storage.ipynb index 87c0ecc..e828138 100644 --- a/content/GCP/03_intro_to_cloud_storage.ipynb +++ b/content/GCP/03_intro_to_cloud_storage.ipynb @@ -7,7 +7,7 @@ "source": [ "# Introduction to Google Cloud Storage\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 20 min\n", @@ -24,7 +24,8 @@ " * Recognize that resources have a \"location\"\n", " * Recognize danger of public access\n", " * De-allocate Google Cloud Storage storage\n", - "```" + "\n", + ":::" ] }, { @@ -160,28 +161,38 @@ "source": [ "## Delete the Storage\n", "\n", - "```{admonition} Danger\n", + ":::{admonition} Danger\n", ":class: danger\n", "\n", "This will destroy the storage *Bucket* and and ALL the data in it! You cannot undelete a Bucket!\n", - "```" + "\n", + ":::" ] }, { "cell_type": "markdown", - "id": "59005efb-2aad-4dcd-ac7b-f153f4295abc", + "id": "619c0350-6058-4162-9b4b-3a6aaf96041f", "metadata": { "tags": [] }, "source": [ - "We will now complete the resource life-cycle by deleting the bucket we just created. Think about the process we did for creating the bucket and follow a similar one.\n", - "\n", - "```{admonition} Exercise\n", + "We will now complete the resource life-cycle by deleting the bucket we just created. Think about the process we did for creating the bucket and follow a similar one." + ] + }, + { + "cell_type": "markdown", + "id": "9a6973f1-07f4-4c72-bd92-1a6b9741eed9", + "metadata": { + "tags": [] + }, + "source": [ + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", " * Try to delete the storage bucket on your own\n", " * Verify that the storage bucket has been deleted.\n", - "```" + "\n", + ":::" ] }, { @@ -248,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.9.2" } }, "nbformat": 4, diff --git a/content/GCP/04_intro_to_cli.ipynb b/content/GCP/04_intro_to_cli.ipynb index 7ef7348..33404b9 100644 --- a/content/GCP/04_intro_to_cli.ipynb +++ b/content/GCP/04_intro_to_cli.ipynb @@ -7,7 +7,7 @@ "source": [ "# Introduction to the Command Line Interface (CLI)\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 20 min\n", @@ -24,7 +24,8 @@ " * Verify basic settings.\n", " * Use environment variables for configuration.\n", " * Understand the importance of using variables reproducibility and automation.\n", - "``` " + "\n", + ":::" ] }, { @@ -61,11 +62,11 @@ "id": "8eb44568-1108-4963-aebf-7f6b98ddaffc", "metadata": {}, "source": [ - "```{admonition} Tip\n", - ":class: tip\n", + ":::{tip}\n", "\n", "You can access the cloud shell from your laptop via `gcloud cloud-shell ssh` if you have the [Google Cloud SDK installed](https://cloud.google.com/sdk/docs/install). Installing the Google Cloud SDK will also allow you to run `gcloud` and `gsutil` commands directly from your laptop, workstation, or cluster. *Pro-tip, you cannot use a service account to access the cloud shell.*\n", - "```" + "\n", + ":::" ] }, { @@ -197,7 +198,7 @@ }, { "cell_type": "markdown", - "id": "598b5d12-9bea-49de-a772-4113727e0859", + "id": "fe9c7d78-edbe-4c84-81d1-a83c20773181", "metadata": {}, "source": [ "### Environment Variables\n", @@ -206,13 +207,19 @@ "\n", "*To make the point even clearer, we use environment variables in the Cloud Essentials notebooks instead of hard coding them, which makes it easy for anyone to run, use, and edit and thus collaborate and contribute to them!*\n", "\n", - "We now demonstrate the basic use environment variables. As a reminder, environment variables are used to store configuration information that can be easily passed between programs and programming languages.\n", - "\n", - "```{admonition} Advanced Tip\n", - ":class: tip\n", + "We now demonstrate the basic use environment variables. As a reminder, environment variables are used to store configuration information that can be easily passed between programs and programming languages." + ] + }, + { + "cell_type": "markdown", + "id": "b843dba2-3276-4e2e-9619-8598b2718e4d", + "metadata": {}, + "source": [ + ":::{tip}\n", "\n", "Although we do not always need to, we should always enclose shell variables in double quotes and enclose the variable name in curly braces (funny things may happen otherwise) when writing scripts, for example `\"${TEST}\"`. In most cases it is easier to do this every time than try to figure out when it is possible to use the short form. We only use the short form (`$TEST`) when it is used frequently and known to always work (most cases here), in our case it is `$PROJECT` and `$BUCKET`. When in doubt, use the explicit form.\n", - "```" + "\n", + ":::" ] }, { @@ -413,7 +420,7 @@ "source": [ "Note the \"Your active configuration is: ...\" line is a \"warning\" and not actually part of the output of the program.\n", "\n", - "````{admonition} Advanced Tip\n", + "::::{admonition} Advanced Tip\n", ":class: tip\n", "\n", "You can also use \n", @@ -421,7 +428,8 @@ "PROJECT=$(gcloud config list --format='value(core.project)')\n", "```\n", "to get the project id without the warning.\n", - "````" + "\n", + "::::" ] }, { @@ -462,12 +470,13 @@ "id": "270e0abb-d5e9-476a-af91-060cc0ea0349", "metadata": {}, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", " * What command shows the account? (hint: we used it already)\n", " * Set the `ACCOUNT` environment variable with the correct value. (hint: be careful with punctuation (single and double quotes) and matching brackets and punctuation)\n", - "```" + "\n", + ":::" ] }, { diff --git a/content/GCP/05_cli_storage.ipynb b/content/GCP/05_cli_storage.ipynb index b643e0c..f0331aa 100644 --- a/content/GCP/05_cli_storage.ipynb +++ b/content/GCP/05_cli_storage.ipynb @@ -8,7 +8,7 @@ "# Managing Cloud Storage from the Command Line\n", "\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 20 min\n", @@ -22,7 +22,8 @@ " * Manage buckets using the command line.\n", " * Create a bucket with a sensible configuration.\n", " * Learn to manage data (add, list, retrieve, delete) in a bucket using the command line.\n", - "```\n" + "\n", + ":::" ] }, { @@ -69,11 +70,11 @@ "id": "0727548c-bb05-4664-8ed5-cc33ba1b8021", "metadata": {}, "source": [ - "```{admonition} Top\n", - ":class: tip\n", + ":::{tip}\n", "\n", "If you need to setup a new Cloud Shell you can copy and paste the above commands into the new shell.\n", - "```" + "\n", + ":::" ] }, { @@ -244,7 +245,11 @@ "cell_type": "code", "execution_count": 9, "id": "8fc85600-a793-413b-b139-642e4cf08a8e", - "metadata": {}, + "metadata": { + "tags": [ + "hide-cell" + ] + }, "outputs": [], "source": [ "sleep 2 # used to ensure that the next command runs correctly in Jupyter" @@ -296,7 +301,7 @@ "id": "e9e48571-80fa-40cc-838f-ec5ea3000bd7", "metadata": {}, "source": [ - "````{admonition} Note\n", + "::::{admonition} Note\n", ":class: note\n", "\n", "You will probably need to enable the logging api to continue, press `y` to accept as shown below:\n", @@ -305,7 +310,7 @@ "like to enable and retry (this will take a few minutes)? (y/N)?\n", "```\n", "\n", - "````" + "::::" ] }, { @@ -610,11 +615,12 @@ "id": "1427e837-f65f-4d35-8088-6a82677b5ed6", "metadata": {}, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", ":class: exercise\n", "\n", " * Display the object with the date in the bucket.\n", - "```" + "\n", + ":::" ] }, { diff --git a/content/GCP/06_running_analysis.ipynb b/content/GCP/06_running_analysis.ipynb index 7d6e0f4..f6b01e3 100644 --- a/content/GCP/06_running_analysis.ipynb +++ b/content/GCP/06_running_analysis.ipynb @@ -293,7 +293,11 @@ "cell_type": "code", "execution_count": 5, "id": "05fadd30-4f35-4a93-b713-cc132131b948", - "metadata": {}, + "metadata": { + "tags": [ + "hide-output" + ] + }, "outputs": [ { "name": "stdout", @@ -755,7 +759,9 @@ "id": "cccec3e1-0dcd-4e3b-a059-a884f5219b66", "metadata": { "scrolled": true, - "tags": [] + "tags": [ + "hide-output" + ] }, "outputs": [ { @@ -847,13 +853,14 @@ "id": "0ca2e2ff-8276-4092-8a9e-ca754db5078e", "metadata": {}, "source": [ - "::::{admonition} Tip\n", - ":class: tip\n", + "::::{tip}\n", + "\n", "To run the above analysis in one step run\n", "\n", "```\n", "bash get-data.sh\n", "```\n", + "\n", "::::" ] }, diff --git a/content/GCP/06_sharing_results.ipynb b/content/GCP/06_sharing_results.ipynb index edc6e0b..b5a9cc0 100644 --- a/content/GCP/06_sharing_results.ipynb +++ b/content/GCP/06_sharing_results.ipynb @@ -7,7 +7,7 @@ "source": [ "# Sharing Data (Optional)\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 30 min\n", @@ -15,12 +15,13 @@ "**Exercises:** 5 min (optional)\n", "\n", "**Questions:**\n", - "* How do I share my results?\n", + " * How do I share my results?\n", "\n", "**Objectives:**\n", - "* Understand the basics of Identity and Access Management (IAM)\n", - "* Add collaborators to a Bucket with appropriate permissions.\n", - "```" + " * Understand the basics of Identity and Access Management (IAM)\n", + " * Add collaborators to a Bucket with appropriate permissions.\n", + "\n", + ":::" ] }, { @@ -50,12 +51,14 @@ "tags": [] }, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", "Answer the following questions:\n", " * What is the \"Who, What, Where\" of the IAM policy that allows you to use your project?\n", " * What else has permissions to do things in your project and state the \"Who, What, Where\"?\n", - "```" + "\n", + ":::" ] }, { @@ -126,10 +129,12 @@ "id": "4b93362c-c22b-453c-910b-db4a14ca58af", "metadata": {}, "source": [ - "```{admonition} Exercise\n", + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", "*Instructors: You may want to have students share these buckets for the example to reduce screen flipping and involve the students.*\n", - "```" + "\n", + ":::" ] } ], diff --git a/content/GCP/07_monitoring_costs.ipynb b/content/GCP/07_monitoring_costs.ipynb index 781ba4e..8407ccb 100644 --- a/content/GCP/07_monitoring_costs.ipynb +++ b/content/GCP/07_monitoring_costs.ipynb @@ -7,7 +7,7 @@ "source": [ "# Monitoring Costs\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 10 min\n", @@ -15,20 +15,20 @@ "**Exercises:** none\n", "\n", "**Questions:**\n", - "* How do I find out how much I have spent?\n", - "* How do I find what is running and stored in my project?\n", + " * How do I find out how much I have spent?\n", + " * How do I find what is running and stored in my project?\n", "\n", "**Objectives:**\n", - "* Learn about Billing Accounts\n", - "* Find information about the Billing Account associated with your project\n", - "* Determine the permissions you have on the Billing Account\n", - "* Find and monitor your spend with billing reports\n", - "* Find where to set Billing Alerts.\n", - "* Find all resources in a Project\n", - "* Extra: List assets with the CLI\n", - "* Extra: Understand how labels are used\n", + " * Learn about Billing Accounts\n", + " * Find information about the Billing Account associated with your project\n", + " * Determine the permissions you have on the Billing Account\n", + " * Find and monitor your spend with billing reports\n", + " * Find where to set Billing Alerts.\n", + " * Find all resources in a Project\n", + " * Extra: List assets with the CLI\n", + " * Extra: Understand how labels are used\n", " \n", - "```" + ":::" ] }, { @@ -152,7 +152,9 @@ "id": "bee03b96-53f6-47c0-bcbf-0bf73fe99f73", "metadata": { "scrolled": true, - "tags": [] + "tags": [ + "hide-output" + ] }, "outputs": [ { @@ -389,16 +391,27 @@ }, { "cell_type": "markdown", - "id": "45681123-b27a-48d8-ac4a-30dc3b46d2c1", + "id": "9b34734b-4039-4589-a98b-e8101f9b96c6", "metadata": {}, "source": [ "## Label Resources (CLI - Extra)\n", "\n", "In order to track resources it is important to Label them. Labeling places key-value pairs (key=value) in the resources metadata (information about the resource) and most of the Google Cloud tools can use this information to search, filter, and group information. In the literature, the example most used is the \"env\" Label and indicates if the resource is in development (dev), testing (test), or production (prod); the lables would be env=test, env=dev and env=prod, respectively. \n", "\n", - "For research and teaching, Labels could be used to track funding, grants, students, or other uses of resources. For large efforts (projects) it is better to use different Projects to separate access and billing and protect the projects from each other.\n", + "For research and teaching, Labels could be used to track funding, grants, students, or other uses of resources. For large efforts (projects) it is better to use different Projects to separate access and billing and protect the projects from each other." + ] + }, + { + "cell_type": "markdown", + "id": "2ee4b84d-80b2-4013-a258-bf709768430b", + "metadata": {}, + "source": [ + ":::{admonition} Pro Tip\n", + ":class: tip\n", + "\n", + "Labeling is called Tagging on AWS and Azure - tagging in GCP is related to firewalls).\n", "\n", - "*Pro-tip: Labeling is called Tagging on AWS and Azure - tagging in GCP is related to firewalls).*\n" + ":::" ] }, { diff --git a/content/GCP/08_cleaning_up_resources.ipynb b/content/GCP/08_cleaning_up_resources.ipynb index f4b7bc1..388edb8 100644 --- a/content/GCP/08_cleaning_up_resources.ipynb +++ b/content/GCP/08_cleaning_up_resources.ipynb @@ -7,7 +7,7 @@ "source": [ "# Cleaning Up Resources\n", "\n", - "```{admonition} Overview\n", + ":::{admonition} Overview\n", ":class: tip\n", "\n", "**Teaching:** 5 min\n", @@ -15,92 +15,166 @@ "**Exercises:** 10 min\n", "\n", "**Questions:**\n", - "* How do I clean up after I'm done for the day?\n", - "* How do I make sure everything is gone?\n", + " * How do I clean up after I'm done for the day?\n", + " * How do I make sure everything is gone?\n", "\n", "**Objectives:**\n", - "* Cleanup resources created by the Lesson.\n", - "* Verify that all the resources have been removed.\n", + " * Cleanup resources created by the Lesson.\n", + " * Verify that all the resources have been removed.\n", "\n", - "```" + ":::" ] }, { "cell_type": "markdown", - "id": "65fb0615-f942-4af0-9087-8f0696df95f9", + "id": "29608fbe-70fa-474e-bcab-9f1fe3754503", "metadata": {}, "source": [ - "## Cleanup VMs\n", - "\n", - "```{admonition} Danger\n", + "## Cleanup Virtual Machine Instances" + ] + }, + { + "cell_type": "markdown", + "id": "e20eead6-05a0-4936-a27a-bb3377ae3cc0", + "metadata": {}, + "source": [ + ":::{admonition} Danger\n", ":class: danger\n", "\n", "This will destroy the VM instance and and ALL the data in it! You cannot undelete an instance!\n", - "```\n", "\n", - "```{admonition} Exercise\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "33ff4396-b718-4cba-8547-398ff48ea914", + "metadata": {}, + "source": [ + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", - " * Try to delete the **VM Instance** on your own\n", - "```\n", + " * Try to delete the **VM Instance** on your own\n", "\n", - "Navigate to the **Compute Engine** service and in the **VM Instances** page and remove the *essentials* *VM Instance*.\n" + ":::" ] }, { "cell_type": "markdown", - "id": "92321a60-13c6-4c87-aff5-92fb708e8bff", + "id": "63cf29e5-f3bb-426d-9a9c-2a9269caf7f4", "metadata": {}, "source": [ - "## Cleanup Buckets\n", - "\n", - "```{admonition} Danger\n", + "Navigate to the **Compute Engine** service and in the **VM Instances** page and remove the *essentials* *VM Instance*." + ] + }, + { + "cell_type": "markdown", + "id": "b7bb9c0c-98e5-41c6-a1a2-3cde35a2e994", + "metadata": {}, + "source": [ + "## Cleanup Buckets" + ] + }, + { + "cell_type": "markdown", + "id": "1e686ed7-f126-4941-a0bd-94b36d2e2ab5", + "metadata": {}, + "source": [ + ":::{admonition} Danger\n", ":class: danger\n", "\n", "This will destroy the storage *Bucket* and and ALL the data in it! You cannot undelete a Bucket!\n", - "```\n", - "\n", - "```{admonition} Exercise\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "4c6552f8-7b49-4414-8c44-8e739ec2ab44", + "metadata": {}, + "source": [ + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", - " * Try to delete the storage **bucket** on your own\n", - "```\n", + " * Try to delete the storage **bucket** on your own\n", "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "440b89c3-52e1-44bb-945c-d323fccbf2e0", + "metadata": {}, + "source": [ "Navigate to the **Cloud Storage** service and in the **browser** page and remove the *essentials* Bucket." ] }, { "cell_type": "markdown", - "id": "6753b415-1fa9-4716-8c41-8d98228af51c", + "id": "f3749cf1-90d3-43db-980f-fb815c6363c0", "metadata": {}, "source": [ - "## Verify Cleanup\n", - "\n", - "```{admonition} Exercise\n", + "## Verify Cleanup" + ] + }, + { + "cell_type": "markdown", + "id": "2ed44c12-2592-433f-8ace-5f96d2ff7adf", + "metadata": {}, + "source": [ + ":::{admonition} Exercise\n", + ":class: exercise\n", "\n", " * There are at least three ways to verify resource removal, what are they?\n", " * Try to verify that the resources were removed.\n", - "```\n", "\n", - "```{admonition} Tip\n", - ":class: tip\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "b0f3766f-4ec2-487d-bc82-178d275387c0", + "metadata": {}, + "source": [ + ":::{tip}\n", + "\n", "You can also quickly navigate to resource page for most services from the **Resources** tab on the project **Dashboard**\n", - "```\n", "\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "9a4e2677-a8f0-4090-bfc7-4777b42e97c9", + "metadata": {}, + "source": [ "To verify that the resources have been deleted do the following:\n", " * Navigate to the **VM Instances** page and **Cloud Storage** **Browser** to verify the resources have been deleted.\n", " * Navigate to the **IAM & Admin** service and in the **Asset Inventory** page to verify that the resources have been deleted. **Note:** the information collected in the asset inventory is often delayed.\n", - " * Navigate to the **Activity** page and verify the deletion events. \n", - "\n", - "```{admonition} Tip\n", - ":class: tip\n", + " * Navigate to the **Activity** page and verify the deletion events. " + ] + }, + { + "cell_type": "markdown", + "id": "82a53b80-9600-482d-a41a-7be912059ffa", + "metadata": {}, + "source": [ + ":::{tip}\n", "\n", "If this is your own account, remember to visit the Billing Report page that you bookmarked daily.\n", - "```\n", "\n", - "```{admonition} Tip\n", - ":class: tip\n", + ":::" + ] + }, + { + "cell_type": "markdown", + "id": "753d0da7-d327-481e-a28a-333f14153e5d", + "metadata": {}, + "source": [ + ":::{tip}\n", "\n", "You can also create, list, and destroy resources easily from the cli with the `gcloud` and `gsutil` commands.\n", - "```" + "\n", + ":::" ] } ], From 378e33c1b9bd670c3e6defc79c35b5bb746c62b3 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 13:45:00 +0000 Subject: [PATCH 14/21] GCP: Hide cell used for running/rendering only. --- content/GCP/05_cli_storage.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/GCP/05_cli_storage.ipynb b/content/GCP/05_cli_storage.ipynb index f0331aa..8e8507e 100644 --- a/content/GCP/05_cli_storage.ipynb +++ b/content/GCP/05_cli_storage.ipynb @@ -247,7 +247,7 @@ "id": "8fc85600-a793-413b-b139-642e4cf08a8e", "metadata": { "tags": [ - "hide-cell" + "remove-cell" ] }, "outputs": [], From a13d8b577908b2892cf8344827f9087227c9ed31 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 10:50:59 -0500 Subject: [PATCH 15/21] Fix bash kernel error for 'bracketed paste' --- Build.md | 9 +++++++++ scripts/gcp-create.sh | 1 + 2 files changed, 10 insertions(+) diff --git a/Build.md b/Build.md index cd47601..4a61cca 100644 --- a/Build.md +++ b/Build.md @@ -73,3 +73,12 @@ Expect that `aws` is installed locally. A ssh-key named 'learner' is required t ## Azure Expect that `az` is installed and configured locally. It will utilize your ~/.ssh/id_rsa.pub key. + +## Bugs and Fixes + +The bash kernel and Python do not like the new "bracketed paste" mode of the new bash/readline. To fix you can disable "bracketed paste" mode by doing +```bash +echo "set enable-bracketed-paste off" > ~/.inputrc +``` +Note, this removes some copy/paste protection and recommended only for disposable VM's. + diff --git a/scripts/gcp-create.sh b/scripts/gcp-create.sh index aaaefed..1a62094 100755 --- a/scripts/gcp-create.sh +++ b/scripts/gcp-create.sh @@ -43,6 +43,7 @@ gcloud compute ssh --zone=$ZONE $NAME@$VM --ssh-flag='-A' < .ssh/known_hosts +echo "set enable-bracketed-paste off" > ~/.inputrc git config --global color.ui auto git config --global push.default simple git config --global pull.ff only From 12a62629f906dcc7643d48b44e145d873d46de2b Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 17:02:43 +0000 Subject: [PATCH 16/21] GCP: Simplify by with the limit option --- content/GCP/06_running_analysis.ipynb | 939 +++++++++++++------------- 1 file changed, 457 insertions(+), 482 deletions(-) diff --git a/content/GCP/06_running_analysis.ipynb b/content/GCP/06_running_analysis.ipynb index f6b01e3..1c34d1b 100644 --- a/content/GCP/06_running_analysis.ipynb +++ b/content/GCP/06_running_analysis.ipynb @@ -68,7 +68,9 @@ "\n", "Since we only create resources as we need them in the cloud, we will now create a new virtual machine (VM)instance for Drew to use for their analysis.\n", "\n", - "We will do this as an exercise to give you practice in creating resources. Since the virtual machine will need access to storage on your behalf, you will need to change the **access scope** to give **Full** access to the **Storage** API to the virtual machine." + "We will do this as an exercise to give you practice in creating resources. Since the virtual machine will need access to storage on your behalf, you will need to change the **access scope** to give **Full** access to the **Storage** API to the virtual machine.\n", + "\n", + "Before you do anything, think about (and check) your **who**, **where**, and **what**!\n" ] }, { @@ -90,9 +92,9 @@ ":class: exercise\n", "\n", "Using the console navigate to the \"Compute Engine\" service and create a new VM with the following properties.\n", - " * Set the VM instance **name** to \"essentials\"\n", - " * Select a bit larger VM instance by changing the machine type to \"**e2-standard-2**\".\n", - " * Set the VM instance API access for \"**Storage**\" to \"**Full**\". This can be found under \"Identity and API access\" on the \"create an instance\" page and then selecting \"Set access for each API\" and change \"Storage\" to \"Full\". *This will allow the VM to create, read, write, and delete all storage buckets in the project\"*\n", + " * Set the VM instance **name** to \"**essentials**\"\n", + " * Select a bit larger VM instance by changing the machine **type** to \"**e2-standard-2**\".\n", + " * Set the VM instance API access for \"**Storage**\" to \"**Full**\". This can be found under \"Identity and API access\" on the \"create an instance\" page and then selecting \"**Set access for each API**\" and change \"Storage\" to \"Full\". *This will allow the VM to create, read, write, and delete all storage buckets in the project\"*\n", " \n", ":::" ] @@ -121,7 +123,7 @@ "source": [ "## Connect to the VM\n", "\n", - "Now login to the new virtual machine instance by opening up the Cloud Shell and by running the following command:\n", + "Now login to the new virtual machine instance by opening up the Cloud Shell (don't forget to check your **who**, **where**, and **what**) and then running the following command:\n", "```\n", "gcloud compute ssh essentials\n", "```\n", @@ -317,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 1, "id": "96db6a66-3fbf-419a-b8c8-dbb27639e990", "metadata": {}, "outputs": [], @@ -327,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "36554c99-ba08-4733-8ef2-e68d42d0d2b7", "metadata": {}, "outputs": [ @@ -336,9 +338,12 @@ "output_type": "stream", "text": [ "Cloning into 'CLASS-Examples'...\n", - "remote: Enumerating objects: 86, done.\u001b[K\n", - "remote: Total 86 (delta 0), reused 0 (delta 0), pack-reused 86\u001b[K\n", - "Unpacking objects: 100% (86/86), done.\n" + "remote: Enumerating objects: 117, done.\u001b[K\n", + "remote: Counting objects: 100% (10/10), done.\u001b[K\n", + "remote: Compressing objects: 100% (9/9), done.\u001b[K\n", + "remote: Total 117 (delta 1), reused 9 (delta 1), pack-reused 107\u001b[K\n", + "Receiving objects: 100% (117/117), 20.66 KiB | 556.00 KiB/s, done.\n", + "Resolving deltas: 100% (44/44), done.\n" ] } ], @@ -356,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 3, "id": "90c1cda7-60d4-44bb-84f8-e776a77a94ab", "metadata": {}, "outputs": [], @@ -377,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "55b628d5-6e5c-45a5-9cd3-c129db9cdcd2", "metadata": {}, "outputs": [ @@ -385,14 +390,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "total 28\n", - "-rw-r--r-- 1 learner learner 964 Feb 14 20:30 ReadMe.md\n", - "-rw-r--r-- 1 learner learner 72 Feb 14 20:30 clean.sh\n", - "-rw-r--r-- 1 learner learner 280 Feb 14 20:30 download.sh\n", - "-rw-r--r-- 1 learner learner 314 Feb 14 20:30 get-index.sh\n", - "-rw-r--r-- 1 learner learner 613 Feb 14 20:30 process_sat.py\n", - "-rw-r--r-- 1 learner learner 76 Feb 14 20:30 search.json\n", - "-rw-r--r-- 1 learner learner 783 Feb 14 20:30 search.py\n" + "total 32\n", + "-rw-r--r-- 1 learner learner 964 May 20 15:58 ReadMe.md\n", + "-rw-r--r-- 1 learner learner 72 May 20 15:58 clean.sh\n", + "-rw-r--r-- 1 learner learner 280 May 20 15:58 download.sh\n", + "-rw-r--r-- 1 learner learner 113 May 20 15:58 get-data.sh\n", + "-rw-r--r-- 1 learner learner 345 May 20 15:58 get-index.sh\n", + "-rw-r--r-- 1 learner learner 613 May 20 15:58 process_sat.py\n", + "-rw-r--r-- 1 learner learner 95 May 20 15:58 search.json\n", + "-rw-r--r-- 1 learner learner 851 May 20 15:58 search.py\n" ] } ], @@ -414,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "id": "e56ab74a-ae6d-4602-a26b-4a2656bd40cd", "metadata": {}, "outputs": [ @@ -463,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "id": "bbe85b75-c7cd-40ed-a3b0-37cbd0a5f52e", "metadata": {}, "outputs": [ @@ -481,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "id": "18a9b71c-5871-4ce2-a202-b48ad04e8d38", "metadata": {}, "outputs": [ @@ -490,12 +496,7 @@ "output_type": "stream", "text": [ "Copying gs://gcp-public-data-landsat/index.csv.gz...\n", - "==> NOTE: You are downloading one or more large file(s), which would \n", - "run significantly faster if you enabled sliced object downloads. This\n", - "feature is enabled by default but requires that compiled crcmod be\n", - "installed (see \"gsutil help crcmod\").\n", - "\n", - "/ [1 files][731.9 MiB/731.9 MiB] \n", + "\\ [1 files][731.9 MiB/731.9 MiB] 54.4 MiB/s \n", "Operation completed over 1 objects/731.9 MiB. \n" ] } @@ -514,7 +515,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "id": "2cdaf24c-c4aa-4e80-9236-939e7c982916", "metadata": {}, "outputs": [], @@ -532,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "id": "b005876c-f9af-43d6-80c6-f04295413b9b", "metadata": {}, "outputs": [ @@ -541,7 +542,7 @@ "output_type": "stream", "text": [ "total 2.5G\n", - "-rw-r--r-- 1 learner learner 2.5G Feb 14 20:32 index.csv\n" + "-rw-r--r-- 1 learner learner 2.5G May 20 15:59 index.csv\n" ] } ], @@ -559,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "id": "ffe969db-d207-44fe-8957-8d129c76ee8f", "metadata": {}, "outputs": [ @@ -570,12 +571,18 @@ "SCENE_ID,PRODUCT_ID,SPACECRAFT_ID,SENSOR_ID,DATE_ACQUIRED,COLLECTION_NUMBER,COLLECTION_CATEGORY,SENSING_TIME,DATA_TYPE,WRS_PATH,WRS_ROW,CLOUD_COVER,NORTH_LAT,SOUTH_LAT,WEST_LON,EAST_LON,TOTAL_SIZE,BASE_URL\n", "LE71800592011134ASN00,LE07_L1TP_180059_20110514_20161209_01_T1,LANDSAT_7,ETM,2011-05-14,01,T1,2011-05-14T08:50:07.5251363Z,L1TP,180,59,74.0,2.39913,0.50961,18.09062,20.2487,181281962,gs://gcp-public-data-landsat/LE07/01/180/059/LE07_L1TP_180059_20110514_20161209_01_T1\n", "LT51360422008226BKT00,LT05_L1GS_136042_20080813_20161030_01_T2,LANDSAT_5,TM,2008-08-13,01,T2,2008-08-13T04:03:49.0450690Z,L1GS,136,42,92.0,26.9495,25.03915,91.40541,93.81099,141994748,gs://gcp-public-data-landsat/LT05/01/136/042/LT05_L1GS_136042_20080813_20161030_01_T2\n", - "LE71760312020339NSG00,LE07_L1TP_176031_20201204_20201230_01_T1,LANDSAT_7,ETM,2020-12-04,01,T1,2020-12-04T07:41:11.6084536Z,L1TP,176,31,3.0,42.75649,40.7935,33.66313,36.65653,188511155,gs://gcp-public-data-landsat/LE07/01/176/031/LE07_L1TP_176031_20201204_20201230_01_T1\n" + "LE71760312020339NSG00,LE07_L1TP_176031_20201204_20201230_01_T1,LANDSAT_7,ETM,2020-12-04,01,T1,2020-12-04T07:41:11.6084536Z,L1TP,176,31,3.0,42.75649,40.7935,33.66313,36.65653,188511155,gs://gcp-public-data-landsat/LE07/01/176/031/LE07_L1TP_176031_20201204_20201230_01_T1\n", + "LE71930302019087NSG00,LE07_L1TP_193030_20190328_20190423_01_T1,LANDSAT_7,ETM,2019-03-28,01,T1,2019-03-28T09:57:50.8833259Z,L1TP,193,30,1.0,44.17399,42.20768,7.88666,10.97109,154211367,gs://gcp-public-data-landsat/LE07/01/193/030/LE07_L1TP_193030_20190328_20190423_01_T1\n", + "LM10420361973161AAA05,LM01_L1TP_042036_19730610_20180428_01_T2,LANDSAT_1,MSS,1973-06-10,01,T2,1973-06-10T17:50:11.5000000Z,L1TP,42,36,11.0,35.7197,33.79417,-116.97493,-114.47118,27823097,gs://gcp-public-data-landsat/LM01/01/042/036/LM01_L1TP_042036_19730610_20180428_01_T2\n", + "LT51780171998140KIS00,LT05_L1TP_178017_19980520_20161224_01_T1,LANDSAT_5,TM,1998-05-20,01,T1,1998-05-20T08:04:57.6290500Z,L1TP,178,17,88.0,62.53031,60.38833,39.29647,44.07323,110078792,gs://gcp-public-data-landsat/LT05/01/178/017/LT05_L1TP_178017_19980520_20161224_01_T1\n", + "LE71150302015314ASN00,LE07_L1GT_115030_20151110_20161017_01_T2,LANDSAT_7,ETM,2015-11-10,01,T2,2015-11-10T02:03:53.8882257Z,L1GT,115,30,94.0,44.16222,42.18812,128.52473,131.58518,199231999,gs://gcp-public-data-landsat/LE07/01/115/030/LE07_L1GT_115030_20151110_20161017_01_T2\n", + "LE71620272018219NPA00,LE07_L1TP_162027_20180807_20180902_01_T1,LANDSAT_7,ETM,2018-08-07,01,T1,2018-08-07T06:51:16.8070952Z,L1TP,162,27,16.0,48.44773,46.45227,57.25936,60.58404,242206283,gs://gcp-public-data-landsat/LE07/01/162/027/LE07_L1TP_162027_20180807_20180902_01_T1\n", + "LC81240642016196LGN02,LC08_L1TP_124064_20160714_20180523_01_T1,LANDSAT_8,OLI_TIRS,2016-07-14,01,T1,2016-07-14T03:12:23.6248870Z,L1TP,124,64,41.35,-4.73633,-6.8367,103.1169,105.17739,916587606,gs://gcp-public-data-landsat/LC08/01/124/064/LC08_L1TP_124064_20160714_20180523_01_T1\n" ] } ], "source": [ - "head --lines=4 data/index.csv" + "head data/index.csv" ] }, { @@ -612,12 +619,12 @@ "source": [ "## Getting the Data\n", "\n", - "We can see the data is well formed and what we expect. We will now use this data to download data related to a specific point and for the Landsat 8. The following script does a simple filter." + "We can see the data is well formed and what we expect. We will now use this data to download data related to a specific point and limit it to only Landsat 8. The following script does a simple filter." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "id": "c5e300c3-e1f3-4cd4-9679-77725e61c4db", "metadata": {}, "outputs": [ @@ -635,6 +642,7 @@ "config=json.load(open(\"search.json\"))\n", "lat,lon=config['lat'],config['lon']\n", "landsat=config['landsat']\n", + "limit=config['limit']\n", "\n", "reader=csv.reader(sys.stdin)\n", "header=next(reader) # skip header\n", @@ -643,7 +651,8 @@ " west,east=float(WEST_LON),float(EAST_LON)\n", " north,south=float(NORTH_LAT),float(SOUTH_LAT)\n", " if SPACECRAFT_ID==landsat and north >= lat and south <= lat and west <= lon and east >= lon:\n", - " print(BASE_URL) # output BASE_URL\n" + " print(BASE_URL) # output BASE_URL\n", + " limit and sys.exit(0) # limit results\n" ] } ], @@ -661,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, "id": "c9872510-4265-4b0e-aeb5-5a829ff69b24", "metadata": {}, "outputs": [ @@ -672,7 +681,8 @@ "{\n", " \"lat\": 38.899313,\n", " \"lon\": -92.464562,\n", - " \"landsat\": \"LANDSAT_8\"\n", + " \"landsat\": \"LANDSAT_8\",\n", + " \"limit\": true\n", "}\n" ] } @@ -686,12 +696,12 @@ "id": "cbb27235-6bc4-4eb6-b668-5c30427a28b8", "metadata": {}, "source": [ - "Now lets test this on a subset of the data." + "Now lets test this on a subset of the data (note the 'limit' option)." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "id": "6912a9ec-0f9b-4500-ba20-d4280592b323", "metadata": {}, "outputs": [ @@ -699,15 +709,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1\n", - "gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1\n", - "gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20200601_20200608_01_T1\n", - "gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1GT_025033_20150111_20170302_01_T2\n" + "gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1\n" ] } ], "source": [ - "head --lines=200000 data/index.csv | python3 search.py" + "python3 search.py < data/index.csv" ] }, { @@ -720,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "id": "3572c518-df83-4906-bfa6-a37bde2a5063", "metadata": {}, "outputs": [ @@ -750,12 +757,12 @@ "id": "a02100bd-f8c5-42dd-975e-a9eb5369bc81", "metadata": {}, "source": [ - "Get the first 2 datasets" + "Get the first dataset (limit option)" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "id": "cccec3e1-0dcd-4e3b-a059-a884f5219b66", "metadata": { "scrolled": true, @@ -771,52 +778,25 @@ "+++ gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_ANG.txt...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B1.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B11.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B10.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B2.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B3.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B5.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B6.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B4.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B11.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B5.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B7.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B3.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B2.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B6.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B8.TIF...\n", - "==> NOTE: You are downloading one or more large file(s), which would \n", - "run significantly faster if you enabled sliced object downloads. This\n", - "feature is enabled by default but requires that compiled crcmod be\n", - "installed (see \"gsutil help crcmod\").\n", - "\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B9.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_BQA.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_MTL.txt...\n", - "\\ [14/14 files][952.9 MiB/952.9 MiB] 100% Done \n", - "Operation completed over 14 objects/952.9 MiB. \n", - "+++ gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B1.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B10.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B4.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B3.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_ANG.txt...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B11.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B5.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B6.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B7.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B2.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B8.TIF...\n", - "==> NOTE: You are downloading one or more large file(s), which would \n", - "run significantly faster if you enabled sliced object downloads. This\n", - "feature is enabled by default but requires that compiled crcmod be\n", - "installed (see \"gsutil help crcmod\").\n", - "\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_B9.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_BQA.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20210519_20210528_01_T1/LC08_L1TP_025033_20210519_20210528_01_T1_MTL.txt...\n", - "| [14/14 files][ 1.0 GiB/ 1.0 GiB] 100% Done 37.1 MiB/s ETA 00:00:00 \n", - "Operation completed over 14 objects/1.0 GiB. \n" + "- [14/14 files][952.9 MiB/952.9 MiB] 100% Done 56.4 MiB/s ETA 00:00:00 \n", + "Operation completed over 14 objects/952.9 MiB. \n" ] } ], "source": [ - "head --lines=200000 data/index.csv | python3 search.py | head --lines=2 | bash download.sh" + "python3 search.py < data/index.csv | bash download.sh" ] }, { @@ -829,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "id": "a37c1567-14b5-4dc7-bc27-d1b84411fce1", "metadata": {}, "outputs": [ @@ -837,10 +817,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "total 2564796\n", - "drwxr-xr-x 2 learner learner 4096 Feb 14 20:33 \u001b[0m\u001b[01;34mLC08_L1TP_025033_20201007_20201016_01_T1\u001b[0m\n", - "drwxr-xr-x 2 learner learner 4096 Feb 14 20:33 \u001b[01;34mLC08_L1TP_025033_20210519_20210528_01_T1\u001b[0m\n", - "-rw-r--r-- 1 learner learner 2626336574 Feb 14 20:32 index.csv\n" + "total 2564792\n", + "drwxr-xr-x 2 learner learner 4096 May 20 16:00 \u001b[0m\u001b[01;34mLC08_L1TP_025033_20201007_20201016_01_T1\u001b[0m\n", + "-rw-r--r-- 1 learner learner 2626336574 May 20 15:59 index.csv\n" ] } ], @@ -876,7 +855,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "id": "0c027e92-ae6f-4152-b8d6-5a70172de3e2", "metadata": {}, "outputs": [ @@ -920,7 +899,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 18, "id": "0d6f55c9-3e2c-47d7-b4d0-b984fedc110e", "metadata": {}, "outputs": [ @@ -938,7 +917,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 19, "id": "77999a80-7cfd-46d3-86a6-05d199f7e66d", "metadata": {}, "outputs": [ @@ -947,7 +926,7 @@ "output_type": "stream", "text": [ "Traceback (most recent call last):\n", - " File \"process_sat.py\", line 3, in \n", + " File \"/home/learner/CLASS-Examples/landsat/process_sat.py\", line 3, in \n", " import rasterio\n", "ModuleNotFoundError: No module named 'rasterio'\n" ] @@ -963,13 +942,12 @@ "id": "52ada3ec-26cd-4e8b-94c2-8ed33e98be6e", "metadata": {}, "source": [ - "Oops, let's install the library (note: the output will be slightly different due to how this Lesson is built)\n", - "and while we are at it we also need to create the output directory." + "Oops, let's install the library (note: the output will be slightly different due to how this Lesson is built)." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 20, "id": "b5a2b29b-9c1d-4376-a3eb-4a3dc4bac160", "metadata": { "scrolled": true, @@ -983,455 +961,453 @@ "output_type": "stream", "text": [ "Reading package lists... Done\n", - "Building dependency tree \n", + "Building dependency tree... Done\n", "Reading state information... Done\n", "The following additional packages will be installed:\n", - " fontconfig-config fonts-dejavu-core gdal-data libaec0 libarmadillo9\n", - " libarpack2 libblas3 libcharls2 libdap25 libdapclient6v5 libdapserver7v5\n", - " libepsilon1 libfontconfig1 libfreexl1 libfyba0 libgdal20 libgeos-3.7.1\n", - " libgeos-c1v5 libgeotiff2 libgfortran5 libgif7 libhdf4-0-alt libhdf5-103\n", - " libicu63 libjbig0 libjpeg62-turbo libkmlbase1 libkmlconvenience1 libkmldom1\n", - " libkmlengine1 libkmlregionator1 libkmlxsd1 liblapack3 liblcms2-2 libltdl7\n", - " libmariadb3 libminizip1 libnetcdf13 libnspr4 libnss3 libodbc1 libogdi3.2\n", - " libopenjp2-7 libpoppler82 libpq5 libproj13 libqhull7 libspatialite7\n", - " libsuperlu5 libsz2 libtiff5 liburiparser1 libwebp6 libxerces-c3.2 libxml2\n", - " libxslt1.1 mariadb-common mysql-common odbcinst odbcinst1debian2\n", - " poppler-data proj-bin proj-data python3-affine python3-attr python3-bs4\n", - " python3-chardet python3-click python3-click-plugins python3-cligj\n", - " python3-colorama python3-html5lib python3-lxml python3-numpy\n", - " python3-pyparsing python3-snuggs python3-soupsieve python3-webencodings\n", + " gdal-data libaec0 libaom0 libarmadillo10 libarpack2 libblas3 libcfitsio9\n", + " libcharls2 libdap27 libdapclient6v5 libdav1d4 libde265-0 libepsilon1\n", + " libfreexl1 libfyba0 libgdal28 libgeos-3.9.0 libgeos-c1v5 libgeotiff5\n", + " libgfortran5 libgif7 libhdf4-0-alt libhdf5-103-1 libhdf5-hl-100 libheif1\n", + " libicu67 libkmlbase1 libkmldom1 libkmlengine1 liblapack3 liblcms2-2 libltdl7\n", + " libmariadb3 libminizip1 libnetcdf18 libnspr4 libnss3 libnuma1 libodbc1\n", + " libogdi4.1 libopenjp2-7 libpoppler102 libpq5 libproj19 libqhull8.0\n", + " librttopo1 libspatialite7 libsuperlu5 libsz2 liburiparser1 libx265-192\n", + " libxerces-c3.2 libxml2 libxslt1.1 mariadb-common mysql-common odbcinst\n", + " odbcinst1debian2 poppler-data proj-bin proj-data python3-affine python3-attr\n", + " python3-bs4 python3-certifi python3-chardet python3-click\n", + " python3-click-plugins python3-cligj python3-colorama python3-html5lib\n", + " python3-lxml python3-numpy python3-pyparsing python3-six python3-snuggs\n", + " python3-soupsieve python3-webencodings\n", "Suggested packages:\n", " geotiff-bin gdal-bin libgeotiff-epsg libhdf4-doc libhdf4-alt-dev hdf4-tools\n", " liblcms2-utils libmyodbc odbc-postgresql tdsodbc unixodbc-bin ogdi-bin\n", " poppler-utils ghostscript fonts-japanese-mincho | fonts-ipafont-mincho\n", " fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai\n", " fonts-arphic-uming fonts-nanum python-attr-doc python3-genshi\n", - " python3-lxml-dbg python-lxml-doc gfortran python-numpy-doc python3-pytest\n", - " python3-numpy-dbg python-pyparsing-doc\n", + " python3-lxml-dbg python-lxml-doc gfortran python-numpy-doc python3-numpy-dbg\n", + " python3-pytest python-pyparsing-doc\n", "The following NEW packages will be installed:\n", - " fontconfig-config fonts-dejavu-core gdal-data libaec0 libarmadillo9\n", - " libarpack2 libblas3 libcharls2 libdap25 libdapclient6v5 libdapserver7v5\n", - " libepsilon1 libfontconfig1 libfreexl1 libfyba0 libgdal20 libgeos-3.7.1\n", - " libgeos-c1v5 libgeotiff2 libgfortran5 libgif7 libhdf4-0-alt libhdf5-103\n", - " libicu63 libjbig0 libjpeg62-turbo libkmlbase1 libkmlconvenience1 libkmldom1\n", - " libkmlengine1 libkmlregionator1 libkmlxsd1 liblapack3 liblcms2-2 libltdl7\n", - " libmariadb3 libminizip1 libnetcdf13 libnspr4 libnss3 libodbc1 libogdi3.2\n", - " libopenjp2-7 libpoppler82 libpq5 libproj13 libqhull7 libspatialite7\n", - " libsuperlu5 libsz2 libtiff5 liburiparser1 libwebp6 libxerces-c3.2 libxml2\n", - " libxslt1.1 mariadb-common mysql-common odbcinst odbcinst1debian2\n", - " poppler-data proj-bin proj-data python3-affine python3-attr python3-bs4\n", - " python3-chardet python3-click python3-click-plugins python3-cligj\n", - " python3-colorama python3-html5lib python3-lxml python3-numpy\n", - " python3-pyparsing python3-rasterio python3-snuggs python3-soupsieve\n", - " python3-webencodings\n", - "0 upgraded, 79 newly installed, 0 to remove and 2 not upgraded.\n", - "Need to get 46.8 MB of archives.\n", - "After this operation, 172 MB of additional disk space will be used.\n", - "Get:1 http://security.debian.org/debian-security buster/updates/main amd64 libicu63 amd64 63.1-6+deb10u2 [8300 kB]\n", - "Get:2 http://deb.debian.org/debian buster/main amd64 poppler-data all 0.4.9-2 [1473 kB]\n", - "Get:3 http://deb.debian.org/debian buster/main amd64 fonts-dejavu-core all 2.37-1 [1068 kB]\n", - "Get:4 http://deb.debian.org/debian buster/main amd64 fontconfig-config all 2.13.1-2 [280 kB]\n", - "Get:5 http://deb.debian.org/debian buster/main amd64 gdal-data all 2.4.0+dfsg-1 [744 kB]\n", - "Get:6 http://deb.debian.org/debian buster/main amd64 libaec0 amd64 1.0.2-1 [20.1 kB]\n", - "Get:7 http://deb.debian.org/debian buster/main amd64 libgfortran5 amd64 8.3.0-6 [581 kB]\n", - "Get:8 http://deb.debian.org/debian buster/main amd64 libblas3 amd64 3.8.0-2 [148 kB]\n", - "Get:9 http://deb.debian.org/debian buster/main amd64 liblapack3 amd64 3.8.0-2 [2110 kB]\n", - "Get:10 http://deb.debian.org/debian buster/main amd64 libarpack2 amd64 3.7.0-2 [102 kB]\n", - "Get:11 http://deb.debian.org/debian buster/main amd64 libsuperlu5 amd64 5.2.1+dfsg1-4 [161 kB]\n", - "Get:12 http://deb.debian.org/debian buster/main amd64 libarmadillo9 amd64 1:9.200.7+dfsg-1 [88.6 kB]\n", - "Get:13 http://deb.debian.org/debian buster/main amd64 libcharls2 amd64 2.0.0+dfsg-1 [64.3 kB]\n", - "Get:14 http://deb.debian.org/debian buster/main amd64 libxml2 amd64 2.9.4+dfsg1-7+deb10u2 [689 kB]\n", - "Get:15 http://deb.debian.org/debian buster/main amd64 libdap25 amd64 3.20.3-1 [557 kB]\n", - "Get:16 http://deb.debian.org/debian buster/main amd64 libdapclient6v5 amd64 3.20.3-1 [202 kB]\n", - "Get:17 http://deb.debian.org/debian buster/main amd64 libdapserver7v5 amd64 3.20.3-1 [131 kB]\n", - "Get:18 http://deb.debian.org/debian buster/main amd64 libepsilon1 amd64 0.9.2+dfsg-4 [42.0 kB]\n", - "Get:19 http://deb.debian.org/debian buster/main amd64 libfontconfig1 amd64 2.13.1-2 [346 kB]\n", - "Get:20 http://deb.debian.org/debian buster/main amd64 libfreexl1 amd64 1.0.5-3 [34.1 kB]\n", - "Get:21 http://deb.debian.org/debian buster/main amd64 libfyba0 amd64 4.1.1-6 [114 kB]\n", - "Get:22 http://security.debian.org/debian-security buster/updates/main amd64 libtiff5 amd64 4.1.0+git191117-2~deb10u3 [271 kB]\n", - "Get:23 http://deb.debian.org/debian buster/main amd64 libgeos-3.7.1 amd64 3.7.1-1 [735 kB]\n", - "Get:24 http://security.debian.org/debian-security buster/updates/main amd64 liburiparser1 amd64 0.9.1-1+deb10u1 [48.1 kB]\n", - "Get:25 http://deb.debian.org/debian buster/main amd64 libgeos-c1v5 amd64 3.7.1-1 [299 kB]\n", - "Get:26 http://security.debian.org/debian-security buster/updates/main amd64 libnss3 amd64 2:3.42.1-1+deb10u5 [1160 kB]\n", - "Get:27 http://deb.debian.org/debian buster/main amd64 proj-data all 5.2.0-1 [6986 kB]\n", - "Get:28 http://security.debian.org/debian-security buster/updates/main amd64 libpq5 amd64 11.14-0+deb10u1 [171 kB]\n", - "Get:29 http://security.debian.org/debian-security buster/updates/main amd64 python3-lxml amd64 4.3.2-1+deb10u4 [1163 kB]\n", - "Get:30 http://deb.debian.org/debian buster/main amd64 libproj13 amd64 5.2.0-1 [225 kB]\n", - "Get:31 http://deb.debian.org/debian buster/main amd64 libjbig0 amd64 2.1-3.1+b2 [31.0 kB]\n", - "Get:32 http://deb.debian.org/debian buster/main amd64 libjpeg62-turbo amd64 1:1.5.2-2+deb10u1 [133 kB]\n", - "Get:33 http://deb.debian.org/debian buster/main amd64 libwebp6 amd64 0.6.1-2+deb10u1 [261 kB]\n", - "Get:34 http://deb.debian.org/debian buster/main amd64 libgeotiff2 amd64 1.4.3-1 [72.0 kB]\n", - "Get:35 http://deb.debian.org/debian buster/main amd64 libgif7 amd64 5.1.4-3 [43.3 kB]\n", - "Get:36 http://deb.debian.org/debian buster/main amd64 libhdf4-0-alt amd64 4.2.13-4 [277 kB]\n", - "Get:37 http://deb.debian.org/debian buster/main amd64 libsz2 amd64 1.0.2-1 [6676 B]\n", - "Get:38 http://deb.debian.org/debian buster/main amd64 libhdf5-103 amd64 1.10.4+repack-10 [1325 kB]\n", - "Get:39 http://deb.debian.org/debian buster/main amd64 libminizip1 amd64 1.1-8+b1 [20.4 kB]\n", - "Get:40 http://deb.debian.org/debian buster/main amd64 libkmlbase1 amd64 1.3.0-7 [48.9 kB]\n", - "Get:41 http://deb.debian.org/debian buster/main amd64 libkmldom1 amd64 1.3.0-7 [172 kB]\n", - "Get:42 http://deb.debian.org/debian buster/main amd64 libkmlengine1 amd64 1.3.0-7 [78.4 kB]\n", - "Get:43 http://deb.debian.org/debian buster/main amd64 libkmlconvenience1 amd64 1.3.0-7 [50.1 kB]\n", - "Get:44 http://deb.debian.org/debian buster/main amd64 libkmlregionator1 amd64 1.3.0-7 [25.1 kB]\n", - "Get:45 http://deb.debian.org/debian buster/main amd64 libkmlxsd1 amd64 1.3.0-7 [34.6 kB]\n", - "Get:46 http://deb.debian.org/debian buster/main amd64 mysql-common all 5.8+1.0.5 [7324 B]\n", - "Get:47 http://deb.debian.org/debian buster/main amd64 mariadb-common all 1:10.3.31-0+deb10u1 [32.7 kB]\n", - "Get:48 http://deb.debian.org/debian buster/main amd64 libmariadb3 amd64 1:10.3.31-0+deb10u1 [173 kB]\n", - "Get:49 http://deb.debian.org/debian buster/main amd64 libnetcdf13 amd64 1:4.6.2-1 [403 kB]\n", - "Get:50 http://deb.debian.org/debian buster/main amd64 libltdl7 amd64 2.4.6-9 [390 kB]\n", - "Get:51 http://deb.debian.org/debian buster/main amd64 libodbc1 amd64 2.3.6-0.1 [223 kB]\n", - "Get:52 http://deb.debian.org/debian buster/main amd64 libogdi3.2 amd64 3.2.1+ds-4 [241 kB]\n", - "Get:53 http://deb.debian.org/debian buster/main amd64 libopenjp2-7 amd64 2.3.0-2+deb10u2 [158 kB]\n", - "Get:54 http://deb.debian.org/debian buster/main amd64 liblcms2-2 amd64 2.9-3 [145 kB]\n", - "Get:55 http://deb.debian.org/debian buster/main amd64 libnspr4 amd64 2:4.20-1 [112 kB]\n", - "Get:56 http://deb.debian.org/debian buster/main amd64 libpoppler82 amd64 0.71.0-5 [1507 kB]\n", - "Get:57 http://deb.debian.org/debian buster/main amd64 libqhull7 amd64 2015.2-4 [196 kB]\n", - "Get:58 http://deb.debian.org/debian buster/main amd64 libspatialite7 amd64 4.3.0a-5+b2 [1256 kB]\n", - "Get:59 http://deb.debian.org/debian buster/main amd64 libxerces-c3.2 amd64 3.2.2+debian-1+deb10u1 [886 kB]\n", - "Get:60 http://deb.debian.org/debian buster/main amd64 odbcinst amd64 2.3.6-0.1 [48.4 kB]\n", - "Get:61 http://deb.debian.org/debian buster/main amd64 odbcinst1debian2 amd64 2.3.6-0.1 [78.1 kB]\n", - "Get:62 http://deb.debian.org/debian buster/main amd64 libgdal20 amd64 2.4.0+dfsg-1+b1 [6171 kB]\n", - "Get:63 http://deb.debian.org/debian buster/main amd64 libxslt1.1 amd64 1.1.32-2.2~deb10u1 [237 kB]\n", - "Get:64 http://deb.debian.org/debian buster/main amd64 proj-bin amd64 5.2.0-1 [105 kB]\n", - "Get:65 http://deb.debian.org/debian buster/main amd64 python3-affine all 2.2.2-1 [14.5 kB]\n", - "Get:66 http://deb.debian.org/debian buster/main amd64 python3-attr all 18.2.0-1 [37.3 kB]\n", - "Get:67 http://deb.debian.org/debian buster/main amd64 python3-soupsieve all 1.8+dfsg-1 [27.6 kB]\n", - "Get:68 http://deb.debian.org/debian buster/main amd64 python3-bs4 all 4.7.1-1 [94.1 kB]\n", - "Get:69 http://deb.debian.org/debian buster/main amd64 python3-chardet all 3.0.4-3 [80.5 kB]\n", - "Get:70 http://deb.debian.org/debian buster/main amd64 python3-colorama all 0.3.7-1 [18.1 kB]\n", - "Get:71 http://deb.debian.org/debian buster/main amd64 python3-click all 7.0-1 [73.6 kB]\n", - "Get:72 http://deb.debian.org/debian buster/main amd64 python3-click-plugins all 1.0.4-1 [7540 B]\n", - "Get:73 http://deb.debian.org/debian buster/main amd64 python3-cligj all 0.5.0-1 [8212 B]\n", - "Get:74 http://deb.debian.org/debian buster/main amd64 python3-webencodings all 0.5.1-1 [10.9 kB]\n", - "Get:75 http://deb.debian.org/debian buster/main amd64 python3-html5lib all 1.0.1-1 [89.5 kB]\n", - "Get:76 http://deb.debian.org/debian buster/main amd64 python3-numpy amd64 1:1.16.2-1 [2119 kB]\n", - "Get:77 http://deb.debian.org/debian buster/main amd64 python3-pyparsing all 2.2.0+dfsg1-2 [89.6 kB]\n", - "Get:78 http://deb.debian.org/debian buster/main amd64 python3-snuggs all 1.4.3-1 [7228 B]\n", - "Get:79 http://deb.debian.org/debian buster/main amd64 python3-rasterio amd64 1.0.21-1 [818 kB]\n", - "Fetched 46.8 MB in 1s (79.1 MB/s) \n", + " gdal-data libaec0 libaom0 libarmadillo10 libarpack2 libblas3 libcfitsio9\n", + " libcharls2 libdap27 libdapclient6v5 libdav1d4 libde265-0 libepsilon1\n", + " libfreexl1 libfyba0 libgdal28 libgeos-3.9.0 libgeos-c1v5 libgeotiff5\n", + " libgfortran5 libgif7 libhdf4-0-alt libhdf5-103-1 libhdf5-hl-100 libheif1\n", + " libicu67 libkmlbase1 libkmldom1 libkmlengine1 liblapack3 liblcms2-2 libltdl7\n", + " libmariadb3 libminizip1 libnetcdf18 libnspr4 libnss3 libnuma1 libodbc1\n", + " libogdi4.1 libopenjp2-7 libpoppler102 libpq5 libproj19 libqhull8.0\n", + " librttopo1 libspatialite7 libsuperlu5 libsz2 liburiparser1 libx265-192\n", + " libxerces-c3.2 libxml2 libxslt1.1 mariadb-common mysql-common odbcinst\n", + " odbcinst1debian2 poppler-data proj-bin proj-data python3-affine python3-attr\n", + " python3-bs4 python3-certifi python3-chardet python3-click\n", + " python3-click-plugins python3-cligj python3-colorama python3-html5lib\n", + " python3-lxml python3-numpy python3-pyparsing python3-rasterio python3-six\n", + " python3-snuggs python3-soupsieve python3-webencodings\n", + "0 upgraded, 79 newly installed, 0 to remove and 11 not upgraded.\n", + "Need to get 53.2 MB of archives.\n", + "After this operation, 211 MB of additional disk space will be used.\n", + "Get:1 http://security.debian.org/debian-security bullseye-security/main amd64 libpq5 amd64 13.7-0+deb11u1 [180 kB]\n", + "Get:2 http://deb.debian.org/debian bullseye/main amd64 poppler-data all 0.4.10-1 [1602 kB]\n", + "Get:3 http://deb.debian.org/debian bullseye/main amd64 gdal-data all 3.2.2+dfsg-2+deb11u1 [462 kB]\n", + "Get:4 http://deb.debian.org/debian bullseye/main amd64 libaec0 amd64 1.0.4-1 [20.3 kB]\n", + "Get:5 http://deb.debian.org/debian bullseye/main amd64 libaom0 amd64 1.0.0.errata1-3 [1158 kB]\n", + "Get:6 http://deb.debian.org/debian bullseye/main amd64 libblas3 amd64 3.9.0-3 [153 kB]\n", + "Get:7 http://deb.debian.org/debian bullseye/main amd64 libgfortran5 amd64 10.2.1-6 [727 kB]\n", + "Get:8 http://deb.debian.org/debian bullseye/main amd64 liblapack3 amd64 3.9.0-3 [2166 kB]\n", + "Get:9 http://deb.debian.org/debian bullseye/main amd64 libarpack2 amd64 3.8.0-1 [103 kB]\n", + "Get:10 http://deb.debian.org/debian bullseye/main amd64 libsuperlu5 amd64 5.2.2+dfsg1-2 [163 kB]\n", + "Get:11 http://deb.debian.org/debian bullseye/main amd64 libarmadillo10 amd64 1:10.1.2+dfsg-6+b1 [98.8 kB]\n", + "Get:12 http://deb.debian.org/debian bullseye/main amd64 libcfitsio9 amd64 3.490-3 [554 kB]\n", + "Get:13 http://deb.debian.org/debian bullseye/main amd64 libcharls2 amd64 2.2.0+dfsg-2 [79.4 kB]\n", + "Get:14 http://deb.debian.org/debian bullseye/main amd64 libicu67 amd64 67.1-7 [8622 kB]\n", + "Get:15 http://deb.debian.org/debian bullseye/main amd64 libxml2 amd64 2.9.10+dfsg-6.7+deb11u1 [693 kB]\n", + "Get:16 http://deb.debian.org/debian bullseye/main amd64 libdap27 amd64 3.20.7-6 [566 kB]\n", + "Get:17 http://deb.debian.org/debian bullseye/main amd64 libdapclient6v5 amd64 3.20.7-6 [208 kB]\n", + "Get:18 http://deb.debian.org/debian bullseye/main amd64 libdav1d4 amd64 0.7.1-3 [333 kB]\n", + "Get:19 http://deb.debian.org/debian bullseye/main amd64 libde265-0 amd64 1.0.8-1 [242 kB]\n", + "Get:20 http://deb.debian.org/debian bullseye/main amd64 libepsilon1 amd64 0.9.2+dfsg-5 [41.9 kB]\n", + "Get:21 http://deb.debian.org/debian bullseye/main amd64 libfreexl1 amd64 1.0.6-1 [34.2 kB]\n", + "Get:22 http://deb.debian.org/debian bullseye/main amd64 libfyba0 amd64 4.1.1-7 [114 kB]\n", + "Get:23 http://deb.debian.org/debian bullseye/main amd64 libgeos-3.9.0 amd64 3.9.0-1 [921 kB]\n", + "Get:24 http://deb.debian.org/debian bullseye/main amd64 libgeos-c1v5 amd64 3.9.0-1 [377 kB]\n", + "Get:25 http://deb.debian.org/debian bullseye/main amd64 proj-data all 7.2.1-1 [7940 kB]\n", + "Get:26 http://deb.debian.org/debian bullseye/main amd64 libproj19 amd64 7.2.1-1 [1132 kB]\n", + "Get:27 http://deb.debian.org/debian bullseye/main amd64 libgeotiff5 amd64 1.6.0-1 [70.3 kB]\n", + "Get:28 http://deb.debian.org/debian bullseye/main amd64 libgif7 amd64 5.1.9-2 [45.1 kB]\n", + "Get:29 http://deb.debian.org/debian bullseye/main amd64 libhdf4-0-alt amd64 4.2.15-3 [278 kB]\n", + "Get:30 http://deb.debian.org/debian bullseye/main amd64 libsz2 amd64 1.0.4-1 [6760 B]\n", + "Get:31 http://deb.debian.org/debian bullseye/main amd64 libhdf5-103-1 amd64 1.10.6+repack-4+deb11u1 [1189 kB]\n", + "Get:32 http://deb.debian.org/debian bullseye/main amd64 libnuma1 amd64 2.0.12-1+b1 [26.3 kB]\n", + "Get:33 http://deb.debian.org/debian bullseye/main amd64 libx265-192 amd64 3.4-2 [1095 kB]\n", + "Get:34 http://deb.debian.org/debian bullseye/main amd64 libheif1 amd64 1.11.0-1 [191 kB]\n", + "Get:35 http://deb.debian.org/debian bullseye/main amd64 libminizip1 amd64 1.1-8+b1 [20.4 kB]\n", + "Get:36 http://deb.debian.org/debian bullseye/main amd64 liburiparser1 amd64 0.9.4+dfsg-1+deb11u1 [45.9 kB]\n", + "Get:37 http://deb.debian.org/debian bullseye/main amd64 libkmlbase1 amd64 1.3.0-9 [48.7 kB]\n", + "Get:38 http://deb.debian.org/debian bullseye/main amd64 libkmldom1 amd64 1.3.0-9 [156 kB]\n", + "Get:39 http://deb.debian.org/debian bullseye/main amd64 libkmlengine1 amd64 1.3.0-9 [77.7 kB]\n", + "Get:40 http://deb.debian.org/debian bullseye/main amd64 mysql-common all 5.8+1.0.7 [7464 B]\n", + "Get:41 http://deb.debian.org/debian bullseye/main amd64 mariadb-common all 1:10.5.15-0+deb11u1 [36.7 kB]\n", + "Get:42 http://deb.debian.org/debian bullseye/main amd64 libmariadb3 amd64 1:10.5.15-0+deb11u1 [176 kB]\n", + "Get:43 http://deb.debian.org/debian bullseye/main amd64 libhdf5-hl-100 amd64 1.10.6+repack-4+deb11u1 [81.8 kB]\n", + "Get:44 http://deb.debian.org/debian bullseye/main amd64 libnetcdf18 amd64 1:4.7.4-1 [399 kB]\n", + "Get:45 http://deb.debian.org/debian bullseye/main amd64 libltdl7 amd64 2.4.6-15 [391 kB]\n", + "Get:46 http://deb.debian.org/debian bullseye/main amd64 libodbc1 amd64 2.3.6-0.1+b1 [224 kB]\n", + "Get:47 http://deb.debian.org/debian bullseye/main amd64 libogdi4.1 amd64 4.1.0+ds-5 [213 kB]\n", + "Get:48 http://deb.debian.org/debian bullseye/main amd64 libopenjp2-7 amd64 2.4.0-3 [172 kB]\n", + "Get:49 http://deb.debian.org/debian bullseye/main amd64 liblcms2-2 amd64 2.12~rc1-2 [150 kB]\n", + "Get:50 http://deb.debian.org/debian bullseye/main amd64 libnspr4 amd64 2:4.29-1 [112 kB]\n", + "Get:51 http://deb.debian.org/debian bullseye/main amd64 libnss3 amd64 2:3.61-1+deb11u2 [1306 kB]\n", + "Get:52 http://deb.debian.org/debian bullseye/main amd64 libpoppler102 amd64 20.09.0-3.1 [1675 kB]\n", + "Get:53 http://deb.debian.org/debian bullseye/main amd64 libqhull8.0 amd64 2020.2-3 [246 kB]\n", + "Get:54 http://deb.debian.org/debian bullseye/main amd64 librttopo1 amd64 1.1.0-2 [180 kB]\n", + "Get:55 http://deb.debian.org/debian bullseye/main amd64 libspatialite7 amd64 5.0.1-2 [1796 kB]\n", + "Get:56 http://deb.debian.org/debian bullseye/main amd64 libxerces-c3.2 amd64 3.2.3+debian-3 [870 kB]\n", + "Get:57 http://deb.debian.org/debian bullseye/main amd64 odbcinst amd64 2.3.6-0.1+b1 [48.7 kB]\n", + "Get:58 http://deb.debian.org/debian bullseye/main amd64 odbcinst1debian2 amd64 2.3.6-0.1+b1 [78.6 kB]\n", + "Get:59 http://deb.debian.org/debian bullseye/main amd64 libgdal28 amd64 3.2.2+dfsg-2+deb11u1 [7255 kB]\n", + "Get:60 http://deb.debian.org/debian bullseye/main amd64 libxslt1.1 amd64 1.1.34-4 [239 kB]\n", + "Get:61 http://deb.debian.org/debian bullseye/main amd64 proj-bin amd64 7.2.1-1 [189 kB]\n", + "Get:62 http://deb.debian.org/debian bullseye/main amd64 python3-affine all 2.3.0-2 [15.0 kB]\n", + "Get:63 http://deb.debian.org/debian bullseye/main amd64 python3-attr all 20.3.0-1 [52.9 kB]\n", + "Get:64 http://deb.debian.org/debian bullseye/main amd64 python3-soupsieve all 2.2.1-1 [34.7 kB]\n", + "Get:65 http://deb.debian.org/debian bullseye/main amd64 python3-bs4 all 4.9.3-1 [112 kB]\n", + "Get:66 http://deb.debian.org/debian bullseye/main amd64 python3-certifi all 2020.6.20-1 [151 kB]\n", + "Get:67 http://deb.debian.org/debian bullseye/main amd64 python3-chardet all 4.0.0-1 [99.0 kB]\n", + "Get:68 http://deb.debian.org/debian bullseye/main amd64 python3-colorama all 0.4.4-1 [28.5 kB]\n", + "Get:69 http://deb.debian.org/debian bullseye/main amd64 python3-click all 7.1.2-1 [75.7 kB]\n", + "Get:70 http://deb.debian.org/debian bullseye/main amd64 python3-click-plugins all 1.1.1-3 [10.3 kB]\n", + "Get:71 http://deb.debian.org/debian bullseye/main amd64 python3-cligj all 0.7.1-1 [9024 B]\n", + "Get:72 http://deb.debian.org/debian bullseye/main amd64 python3-six all 1.16.0-2 [17.5 kB]\n", + "Get:73 http://deb.debian.org/debian bullseye/main amd64 python3-webencodings all 0.5.1-2 [11.0 kB]\n", + "Get:74 http://deb.debian.org/debian bullseye/main amd64 python3-html5lib all 1.1-3 [93.0 kB]\n", + "Get:75 http://deb.debian.org/debian bullseye/main amd64 python3-lxml amd64 4.6.3+dfsg-0.1+deb11u1 [1093 kB]\n", + "Get:76 http://deb.debian.org/debian bullseye/main amd64 python3-numpy amd64 1:1.19.5-1 [2693 kB]\n", + "Get:77 http://deb.debian.org/debian bullseye/main amd64 python3-pyparsing all 2.4.7-1 [109 kB]\n", + "Get:78 http://deb.debian.org/debian bullseye/main amd64 python3-snuggs all 1.4.7-2 [7780 B]\n", + "Get:79 http://deb.debian.org/debian bullseye/main amd64 python3-rasterio amd64 1.2.0-1 [839 kB]\n", + "Fetched 53.2 MB in 1s (52.4 MB/s) \n", "Extracting templates from packages: 100%\n", - "Preconfiguring packages ...\n", "Selecting previously unselected package poppler-data.\n", - "(Reading database ... 57852 files and directories currently installed.)\n", - "Preparing to unpack .../00-poppler-data_0.4.9-2_all.deb ...\n", - "Unpacking poppler-data (0.4.9-2) ...\n", - "Selecting previously unselected package fonts-dejavu-core.\n", - "Preparing to unpack .../01-fonts-dejavu-core_2.37-1_all.deb ...\n", - "Unpacking fonts-dejavu-core (2.37-1) ...\n", - "Selecting previously unselected package fontconfig-config.\n", - "Preparing to unpack .../02-fontconfig-config_2.13.1-2_all.deb ...\n", - "Unpacking fontconfig-config (2.13.1-2) ...\n", + "(Reading database ... 63527 files and directories currently installed.)\n", + "Preparing to unpack .../00-poppler-data_0.4.10-1_all.deb ...\n", + "Unpacking poppler-data (0.4.10-1) ...\n", "Selecting previously unselected package gdal-data.\n", - "Preparing to unpack .../03-gdal-data_2.4.0+dfsg-1_all.deb ...\n", - "Unpacking gdal-data (2.4.0+dfsg-1) ...\n", + "Preparing to unpack .../01-gdal-data_3.2.2+dfsg-2+deb11u1_all.deb ...\n", + "Unpacking gdal-data (3.2.2+dfsg-2+deb11u1) ...\n", "Selecting previously unselected package libaec0:amd64.\n", - "Preparing to unpack .../04-libaec0_1.0.2-1_amd64.deb ...\n", - "Unpacking libaec0:amd64 (1.0.2-1) ...\n", - "Selecting previously unselected package libgfortran5:amd64.\n", - "Preparing to unpack .../05-libgfortran5_8.3.0-6_amd64.deb ...\n", - "Unpacking libgfortran5:amd64 (8.3.0-6) ...\n", + "Preparing to unpack .../02-libaec0_1.0.4-1_amd64.deb ...\n", + "Unpacking libaec0:amd64 (1.0.4-1) ...\n", + "Selecting previously unselected package libaom0:amd64.\n", + "Preparing to unpack .../03-libaom0_1.0.0.errata1-3_amd64.deb ...\n", + "Unpacking libaom0:amd64 (1.0.0.errata1-3) ...\n", "Selecting previously unselected package libblas3:amd64.\n", - "Preparing to unpack .../06-libblas3_3.8.0-2_amd64.deb ...\n", - "Unpacking libblas3:amd64 (3.8.0-2) ...\n", + "Preparing to unpack .../04-libblas3_3.9.0-3_amd64.deb ...\n", + "Unpacking libblas3:amd64 (3.9.0-3) ...\n", + "Selecting previously unselected package libgfortran5:amd64.\n", + "Preparing to unpack .../05-libgfortran5_10.2.1-6_amd64.deb ...\n", + "Unpacking libgfortran5:amd64 (10.2.1-6) ...\n", "Selecting previously unselected package liblapack3:amd64.\n", - "Preparing to unpack .../07-liblapack3_3.8.0-2_amd64.deb ...\n", - "Unpacking liblapack3:amd64 (3.8.0-2) ...\n", + "Preparing to unpack .../06-liblapack3_3.9.0-3_amd64.deb ...\n", + "Unpacking liblapack3:amd64 (3.9.0-3) ...\n", "Selecting previously unselected package libarpack2:amd64.\n", - "Preparing to unpack .../08-libarpack2_3.7.0-2_amd64.deb ...\n", - "Unpacking libarpack2:amd64 (3.7.0-2) ...\n", + "Preparing to unpack .../07-libarpack2_3.8.0-1_amd64.deb ...\n", + "Unpacking libarpack2:amd64 (3.8.0-1) ...\n", "Selecting previously unselected package libsuperlu5:amd64.\n", - "Preparing to unpack .../09-libsuperlu5_5.2.1+dfsg1-4_amd64.deb ...\n", - "Unpacking libsuperlu5:amd64 (5.2.1+dfsg1-4) ...\n", - "Selecting previously unselected package libarmadillo9.\n", - "Preparing to unpack .../10-libarmadillo9_1%3a9.200.7+dfsg-1_amd64.deb ...\n", - "Unpacking libarmadillo9 (1:9.200.7+dfsg-1) ...\n", + "Preparing to unpack .../08-libsuperlu5_5.2.2+dfsg1-2_amd64.deb ...\n", + "Unpacking libsuperlu5:amd64 (5.2.2+dfsg1-2) ...\n", + "Selecting previously unselected package libarmadillo10.\n", + "Preparing to unpack .../09-libarmadillo10_1%3a10.1.2+dfsg-6+b1_amd64.deb ...\n", + "Unpacking libarmadillo10 (1:10.1.2+dfsg-6+b1) ...\n", + "Selecting previously unselected package libcfitsio9:amd64.\n", + "Preparing to unpack .../10-libcfitsio9_3.490-3_amd64.deb ...\n", + "Unpacking libcfitsio9:amd64 (3.490-3) ...\n", "Selecting previously unselected package libcharls2:amd64.\n", - "Preparing to unpack .../11-libcharls2_2.0.0+dfsg-1_amd64.deb ...\n", - "Unpacking libcharls2:amd64 (2.0.0+dfsg-1) ...\n", - "Selecting previously unselected package libicu63:amd64.\n", - "Preparing to unpack .../12-libicu63_63.1-6+deb10u2_amd64.deb ...\n", - "Unpacking libicu63:amd64 (63.1-6+deb10u2) ...\n", + "Preparing to unpack .../11-libcharls2_2.2.0+dfsg-2_amd64.deb ...\n", + "Unpacking libcharls2:amd64 (2.2.0+dfsg-2) ...\n", + "Selecting previously unselected package libicu67:amd64.\n", + "Preparing to unpack .../12-libicu67_67.1-7_amd64.deb ...\n", + "Unpacking libicu67:amd64 (67.1-7) ...\n", "Selecting previously unselected package libxml2:amd64.\n", - "Preparing to unpack .../13-libxml2_2.9.4+dfsg1-7+deb10u2_amd64.deb ...\n", - "Unpacking libxml2:amd64 (2.9.4+dfsg1-7+deb10u2) ...\n", - "Selecting previously unselected package libdap25:amd64.\n", - "Preparing to unpack .../14-libdap25_3.20.3-1_amd64.deb ...\n", - "Unpacking libdap25:amd64 (3.20.3-1) ...\n", + "Preparing to unpack .../13-libxml2_2.9.10+dfsg-6.7+deb11u1_amd64.deb ...\n", + "Unpacking libxml2:amd64 (2.9.10+dfsg-6.7+deb11u1) ...\n", + "Selecting previously unselected package libdap27:amd64.\n", + "Preparing to unpack .../14-libdap27_3.20.7-6_amd64.deb ...\n", + "Unpacking libdap27:amd64 (3.20.7-6) ...\n", "Selecting previously unselected package libdapclient6v5:amd64.\n", - "Preparing to unpack .../15-libdapclient6v5_3.20.3-1_amd64.deb ...\n", - "Unpacking libdapclient6v5:amd64 (3.20.3-1) ...\n", - "Selecting previously unselected package libdapserver7v5:amd64.\n", - "Preparing to unpack .../16-libdapserver7v5_3.20.3-1_amd64.deb ...\n", - "Unpacking libdapserver7v5:amd64 (3.20.3-1) ...\n", + "Preparing to unpack .../15-libdapclient6v5_3.20.7-6_amd64.deb ...\n", + "Unpacking libdapclient6v5:amd64 (3.20.7-6) ...\n", + "Selecting previously unselected package libdav1d4:amd64.\n", + "Preparing to unpack .../16-libdav1d4_0.7.1-3_amd64.deb ...\n", + "Unpacking libdav1d4:amd64 (0.7.1-3) ...\n", + "Selecting previously unselected package libde265-0:amd64.\n", + "Preparing to unpack .../17-libde265-0_1.0.8-1_amd64.deb ...\n", + "Unpacking libde265-0:amd64 (1.0.8-1) ...\n", "Selecting previously unselected package libepsilon1:amd64.\n", - "Preparing to unpack .../17-libepsilon1_0.9.2+dfsg-4_amd64.deb ...\n", - "Unpacking libepsilon1:amd64 (0.9.2+dfsg-4) ...\n", - "Selecting previously unselected package libfontconfig1:amd64.\n", - "Preparing to unpack .../18-libfontconfig1_2.13.1-2_amd64.deb ...\n", - "Unpacking libfontconfig1:amd64 (2.13.1-2) ...\n", + "Preparing to unpack .../18-libepsilon1_0.9.2+dfsg-5_amd64.deb ...\n", + "Unpacking libepsilon1:amd64 (0.9.2+dfsg-5) ...\n", "Selecting previously unselected package libfreexl1:amd64.\n", - "Preparing to unpack .../19-libfreexl1_1.0.5-3_amd64.deb ...\n", - "Unpacking libfreexl1:amd64 (1.0.5-3) ...\n", + "Preparing to unpack .../19-libfreexl1_1.0.6-1_amd64.deb ...\n", + "Unpacking libfreexl1:amd64 (1.0.6-1) ...\n", "Selecting previously unselected package libfyba0:amd64.\n", - "Preparing to unpack .../20-libfyba0_4.1.1-6_amd64.deb ...\n", - "Unpacking libfyba0:amd64 (4.1.1-6) ...\n", - "Selecting previously unselected package libgeos-3.7.1:amd64.\n", - "Preparing to unpack .../21-libgeos-3.7.1_3.7.1-1_amd64.deb ...\n", - "Unpacking libgeos-3.7.1:amd64 (3.7.1-1) ...\n", + "Preparing to unpack .../20-libfyba0_4.1.1-7_amd64.deb ...\n", + "Unpacking libfyba0:amd64 (4.1.1-7) ...\n", + "Selecting previously unselected package libgeos-3.9.0:amd64.\n", + "Preparing to unpack .../21-libgeos-3.9.0_3.9.0-1_amd64.deb ...\n", + "Unpacking libgeos-3.9.0:amd64 (3.9.0-1) ...\n", "Selecting previously unselected package libgeos-c1v5:amd64.\n", - "Preparing to unpack .../22-libgeos-c1v5_3.7.1-1_amd64.deb ...\n", - "Unpacking libgeos-c1v5:amd64 (3.7.1-1) ...\n", + "Preparing to unpack .../22-libgeos-c1v5_3.9.0-1_amd64.deb ...\n", + "Unpacking libgeos-c1v5:amd64 (3.9.0-1) ...\n", "Selecting previously unselected package proj-data.\n", - "Preparing to unpack .../23-proj-data_5.2.0-1_all.deb ...\n", - "Unpacking proj-data (5.2.0-1) ...\n", - "Selecting previously unselected package libproj13:amd64.\n", - "Preparing to unpack .../24-libproj13_5.2.0-1_amd64.deb ...\n", - "Unpacking libproj13:amd64 (5.2.0-1) ...\n", - "Selecting previously unselected package libjbig0:amd64.\n", - "Preparing to unpack .../25-libjbig0_2.1-3.1+b2_amd64.deb ...\n", - "Unpacking libjbig0:amd64 (2.1-3.1+b2) ...\n", - "Selecting previously unselected package libjpeg62-turbo:amd64.\n", - "Preparing to unpack .../26-libjpeg62-turbo_1%3a1.5.2-2+deb10u1_amd64.deb ...\n", - "Unpacking libjpeg62-turbo:amd64 (1:1.5.2-2+deb10u1) ...\n", - "Selecting previously unselected package libwebp6:amd64.\n", - "Preparing to unpack .../27-libwebp6_0.6.1-2+deb10u1_amd64.deb ...\n", - "Unpacking libwebp6:amd64 (0.6.1-2+deb10u1) ...\n", - "Selecting previously unselected package libtiff5:amd64.\n", - "Preparing to unpack .../28-libtiff5_4.1.0+git191117-2~deb10u3_amd64.deb ...\n", - "Unpacking libtiff5:amd64 (4.1.0+git191117-2~deb10u3) ...\n", - "Selecting previously unselected package libgeotiff2:amd64.\n", - "Preparing to unpack .../29-libgeotiff2_1.4.3-1_amd64.deb ...\n", - "Unpacking libgeotiff2:amd64 (1.4.3-1) ...\n", + "Preparing to unpack .../23-proj-data_7.2.1-1_all.deb ...\n", + "Unpacking proj-data (7.2.1-1) ...\n", + "Selecting previously unselected package libproj19:amd64.\n", + "Preparing to unpack .../24-libproj19_7.2.1-1_amd64.deb ...\n", + "Unpacking libproj19:amd64 (7.2.1-1) ...\n", + "Selecting previously unselected package libgeotiff5:amd64.\n", + "Preparing to unpack .../25-libgeotiff5_1.6.0-1_amd64.deb ...\n", + "Unpacking libgeotiff5:amd64 (1.6.0-1) ...\n", "Selecting previously unselected package libgif7:amd64.\n", - "Preparing to unpack .../30-libgif7_5.1.4-3_amd64.deb ...\n", - "Unpacking libgif7:amd64 (5.1.4-3) ...\n", + "Preparing to unpack .../26-libgif7_5.1.9-2_amd64.deb ...\n", + "Unpacking libgif7:amd64 (5.1.9-2) ...\n", "Selecting previously unselected package libhdf4-0-alt.\n", - "Preparing to unpack .../31-libhdf4-0-alt_4.2.13-4_amd64.deb ...\n", - "Unpacking libhdf4-0-alt (4.2.13-4) ...\n", + "Preparing to unpack .../27-libhdf4-0-alt_4.2.15-3_amd64.deb ...\n", + "Unpacking libhdf4-0-alt (4.2.15-3) ...\n", "Selecting previously unselected package libsz2:amd64.\n", - "Preparing to unpack .../32-libsz2_1.0.2-1_amd64.deb ...\n", - "Unpacking libsz2:amd64 (1.0.2-1) ...\n", - "Selecting previously unselected package libhdf5-103:amd64.\n", - "Preparing to unpack .../33-libhdf5-103_1.10.4+repack-10_amd64.deb ...\n", - "Unpacking libhdf5-103:amd64 (1.10.4+repack-10) ...\n", + "Preparing to unpack .../28-libsz2_1.0.4-1_amd64.deb ...\n", + "Unpacking libsz2:amd64 (1.0.4-1) ...\n", + "Selecting previously unselected package libhdf5-103-1:amd64.\n", + "Preparing to unpack .../29-libhdf5-103-1_1.10.6+repack-4+deb11u1_amd64.deb ...\n", + "Unpacking libhdf5-103-1:amd64 (1.10.6+repack-4+deb11u1) ...\n", + "Selecting previously unselected package libnuma1:amd64.\n", + "Preparing to unpack .../30-libnuma1_2.0.12-1+b1_amd64.deb ...\n", + "Unpacking libnuma1:amd64 (2.0.12-1+b1) ...\n", + "Selecting previously unselected package libx265-192:amd64.\n", + "Preparing to unpack .../31-libx265-192_3.4-2_amd64.deb ...\n", + "Unpacking libx265-192:amd64 (3.4-2) ...\n", + "Selecting previously unselected package libheif1:amd64.\n", + "Preparing to unpack .../32-libheif1_1.11.0-1_amd64.deb ...\n", + "Unpacking libheif1:amd64 (1.11.0-1) ...\n", "Selecting previously unselected package libminizip1:amd64.\n", - "Preparing to unpack .../34-libminizip1_1.1-8+b1_amd64.deb ...\n", + "Preparing to unpack .../33-libminizip1_1.1-8+b1_amd64.deb ...\n", "Unpacking libminizip1:amd64 (1.1-8+b1) ...\n", "Selecting previously unselected package liburiparser1:amd64.\n", - "Preparing to unpack .../35-liburiparser1_0.9.1-1+deb10u1_amd64.deb ...\n", - "Unpacking liburiparser1:amd64 (0.9.1-1+deb10u1) ...\n", + "Preparing to unpack .../34-liburiparser1_0.9.4+dfsg-1+deb11u1_amd64.deb ...\n", + "Unpacking liburiparser1:amd64 (0.9.4+dfsg-1+deb11u1) ...\n", "Selecting previously unselected package libkmlbase1:amd64.\n", - "Preparing to unpack .../36-libkmlbase1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmlbase1:amd64 (1.3.0-7) ...\n", + "Preparing to unpack .../35-libkmlbase1_1.3.0-9_amd64.deb ...\n", + "Unpacking libkmlbase1:amd64 (1.3.0-9) ...\n", "Selecting previously unselected package libkmldom1:amd64.\n", - "Preparing to unpack .../37-libkmldom1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmldom1:amd64 (1.3.0-7) ...\n", + "Preparing to unpack .../36-libkmldom1_1.3.0-9_amd64.deb ...\n", + "Unpacking libkmldom1:amd64 (1.3.0-9) ...\n", "Selecting previously unselected package libkmlengine1:amd64.\n", - "Preparing to unpack .../38-libkmlengine1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmlengine1:amd64 (1.3.0-7) ...\n", - "Selecting previously unselected package libkmlconvenience1:amd64.\n", - "Preparing to unpack .../39-libkmlconvenience1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmlconvenience1:amd64 (1.3.0-7) ...\n", - "Selecting previously unselected package libkmlregionator1:amd64.\n", - "Preparing to unpack .../40-libkmlregionator1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmlregionator1:amd64 (1.3.0-7) ...\n", - "Selecting previously unselected package libkmlxsd1:amd64.\n", - "Preparing to unpack .../41-libkmlxsd1_1.3.0-7_amd64.deb ...\n", - "Unpacking libkmlxsd1:amd64 (1.3.0-7) ...\n", + "Preparing to unpack .../37-libkmlengine1_1.3.0-9_amd64.deb ...\n", + "Unpacking libkmlengine1:amd64 (1.3.0-9) ...\n", "Selecting previously unselected package mysql-common.\n", - "Preparing to unpack .../42-mysql-common_5.8+1.0.5_all.deb ...\n", - "Unpacking mysql-common (5.8+1.0.5) ...\n", + "Preparing to unpack .../38-mysql-common_5.8+1.0.7_all.deb ...\n", + "Unpacking mysql-common (5.8+1.0.7) ...\n", "Selecting previously unselected package mariadb-common.\n", - "Preparing to unpack .../43-mariadb-common_1%3a10.3.31-0+deb10u1_all.deb ...\n", - "Unpacking mariadb-common (1:10.3.31-0+deb10u1) ...\n", + "Preparing to unpack .../39-mariadb-common_1%3a10.5.15-0+deb11u1_all.deb ...\n", + "Unpacking mariadb-common (1:10.5.15-0+deb11u1) ...\n", "Selecting previously unselected package libmariadb3:amd64.\n", - "Preparing to unpack .../44-libmariadb3_1%3a10.3.31-0+deb10u1_amd64.deb ...\n", - "Unpacking libmariadb3:amd64 (1:10.3.31-0+deb10u1) ...\n", - "Selecting previously unselected package libnetcdf13:amd64.\n", - "Preparing to unpack .../45-libnetcdf13_1%3a4.6.2-1_amd64.deb ...\n", - "Unpacking libnetcdf13:amd64 (1:4.6.2-1) ...\n", + "Preparing to unpack .../40-libmariadb3_1%3a10.5.15-0+deb11u1_amd64.deb ...\n", + "Unpacking libmariadb3:amd64 (1:10.5.15-0+deb11u1) ...\n", + "Selecting previously unselected package libhdf5-hl-100:amd64.\n", + "Preparing to unpack .../41-libhdf5-hl-100_1.10.6+repack-4+deb11u1_amd64.deb ...\n", + "Unpacking libhdf5-hl-100:amd64 (1.10.6+repack-4+deb11u1) ...\n", + "Selecting previously unselected package libnetcdf18:amd64.\n", + "Preparing to unpack .../42-libnetcdf18_1%3a4.7.4-1_amd64.deb ...\n", + "Unpacking libnetcdf18:amd64 (1:4.7.4-1) ...\n", "Selecting previously unselected package libltdl7:amd64.\n", - "Preparing to unpack .../46-libltdl7_2.4.6-9_amd64.deb ...\n", - "Unpacking libltdl7:amd64 (2.4.6-9) ...\n", + "Preparing to unpack .../43-libltdl7_2.4.6-15_amd64.deb ...\n", + "Unpacking libltdl7:amd64 (2.4.6-15) ...\n", "Selecting previously unselected package libodbc1:amd64.\n", - "Preparing to unpack .../47-libodbc1_2.3.6-0.1_amd64.deb ...\n", - "Unpacking libodbc1:amd64 (2.3.6-0.1) ...\n", - "Selecting previously unselected package libogdi3.2.\n", - "Preparing to unpack .../48-libogdi3.2_3.2.1+ds-4_amd64.deb ...\n", - "Unpacking libogdi3.2 (3.2.1+ds-4) ...\n", + "Preparing to unpack .../44-libodbc1_2.3.6-0.1+b1_amd64.deb ...\n", + "Unpacking libodbc1:amd64 (2.3.6-0.1+b1) ...\n", + "Selecting previously unselected package libogdi4.1.\n", + "Preparing to unpack .../45-libogdi4.1_4.1.0+ds-5_amd64.deb ...\n", + "Unpacking libogdi4.1 (4.1.0+ds-5) ...\n", "Selecting previously unselected package libopenjp2-7:amd64.\n", - "Preparing to unpack .../49-libopenjp2-7_2.3.0-2+deb10u2_amd64.deb ...\n", - "Unpacking libopenjp2-7:amd64 (2.3.0-2+deb10u2) ...\n", + "Preparing to unpack .../46-libopenjp2-7_2.4.0-3_amd64.deb ...\n", + "Unpacking libopenjp2-7:amd64 (2.4.0-3) ...\n", "Selecting previously unselected package liblcms2-2:amd64.\n", - "Preparing to unpack .../50-liblcms2-2_2.9-3_amd64.deb ...\n", - "Unpacking liblcms2-2:amd64 (2.9-3) ...\n", + "Preparing to unpack .../47-liblcms2-2_2.12~rc1-2_amd64.deb ...\n", + "Unpacking liblcms2-2:amd64 (2.12~rc1-2) ...\n", "Selecting previously unselected package libnspr4:amd64.\n", - "Preparing to unpack .../51-libnspr4_2%3a4.20-1_amd64.deb ...\n", - "Unpacking libnspr4:amd64 (2:4.20-1) ...\n", + "Preparing to unpack .../48-libnspr4_2%3a4.29-1_amd64.deb ...\n", + "Unpacking libnspr4:amd64 (2:4.29-1) ...\n", "Selecting previously unselected package libnss3:amd64.\n", - "Preparing to unpack .../52-libnss3_2%3a3.42.1-1+deb10u5_amd64.deb ...\n", - "Unpacking libnss3:amd64 (2:3.42.1-1+deb10u5) ...\n", - "Selecting previously unselected package libpoppler82:amd64.\n", - "Preparing to unpack .../53-libpoppler82_0.71.0-5_amd64.deb ...\n", - "Unpacking libpoppler82:amd64 (0.71.0-5) ...\n", + "Preparing to unpack .../49-libnss3_2%3a3.61-1+deb11u2_amd64.deb ...\n", + "Unpacking libnss3:amd64 (2:3.61-1+deb11u2) ...\n", + "Selecting previously unselected package libpoppler102:amd64.\n", + "Preparing to unpack .../50-libpoppler102_20.09.0-3.1_amd64.deb ...\n", + "Unpacking libpoppler102:amd64 (20.09.0-3.1) ...\n", "Selecting previously unselected package libpq5:amd64.\n", - "Preparing to unpack .../54-libpq5_11.14-0+deb10u1_amd64.deb ...\n", - "Unpacking libpq5:amd64 (11.14-0+deb10u1) ...\n", - "Selecting previously unselected package libqhull7:amd64.\n", - "Preparing to unpack .../55-libqhull7_2015.2-4_amd64.deb ...\n", - "Unpacking libqhull7:amd64 (2015.2-4) ...\n", + "Preparing to unpack .../51-libpq5_13.7-0+deb11u1_amd64.deb ...\n", + "Unpacking libpq5:amd64 (13.7-0+deb11u1) ...\n", + "Selecting previously unselected package libqhull8.0:amd64.\n", + "Preparing to unpack .../52-libqhull8.0_2020.2-3_amd64.deb ...\n", + "Unpacking libqhull8.0:amd64 (2020.2-3) ...\n", + "Selecting previously unselected package librttopo1:amd64.\n", + "Preparing to unpack .../53-librttopo1_1.1.0-2_amd64.deb ...\n", + "Unpacking librttopo1:amd64 (1.1.0-2) ...\n", "Selecting previously unselected package libspatialite7:amd64.\n", - "Preparing to unpack .../56-libspatialite7_4.3.0a-5+b2_amd64.deb ...\n", - "Unpacking libspatialite7:amd64 (4.3.0a-5+b2) ...\n", + "Preparing to unpack .../54-libspatialite7_5.0.1-2_amd64.deb ...\n", + "Unpacking libspatialite7:amd64 (5.0.1-2) ...\n", "Selecting previously unselected package libxerces-c3.2:amd64.\n", - "Preparing to unpack .../57-libxerces-c3.2_3.2.2+debian-1+deb10u1_amd64.deb ...\n", - "Unpacking libxerces-c3.2:amd64 (3.2.2+debian-1+deb10u1) ...\n", + "Preparing to unpack .../55-libxerces-c3.2_3.2.3+debian-3_amd64.deb ...\n", + "Unpacking libxerces-c3.2:amd64 (3.2.3+debian-3) ...\n", "Selecting previously unselected package odbcinst.\n", - "Preparing to unpack .../58-odbcinst_2.3.6-0.1_amd64.deb ...\n", - "Unpacking odbcinst (2.3.6-0.1) ...\n", + "Preparing to unpack .../56-odbcinst_2.3.6-0.1+b1_amd64.deb ...\n", + "Unpacking odbcinst (2.3.6-0.1+b1) ...\n", "Selecting previously unselected package odbcinst1debian2:amd64.\n", - "Preparing to unpack .../59-odbcinst1debian2_2.3.6-0.1_amd64.deb ...\n", - "Unpacking odbcinst1debian2:amd64 (2.3.6-0.1) ...\n", - "Selecting previously unselected package libgdal20.\n", - "Preparing to unpack .../60-libgdal20_2.4.0+dfsg-1+b1_amd64.deb ...\n", - "Unpacking libgdal20 (2.4.0+dfsg-1+b1) ...\n", + "Preparing to unpack .../57-odbcinst1debian2_2.3.6-0.1+b1_amd64.deb ...\n", + "Unpacking odbcinst1debian2:amd64 (2.3.6-0.1+b1) ...\n", + "Selecting previously unselected package libgdal28.\n", + "Preparing to unpack .../58-libgdal28_3.2.2+dfsg-2+deb11u1_amd64.deb ...\n", + "Unpacking libgdal28 (3.2.2+dfsg-2+deb11u1) ...\n", "Selecting previously unselected package libxslt1.1:amd64.\n", - "Preparing to unpack .../61-libxslt1.1_1.1.32-2.2~deb10u1_amd64.deb ...\n", - "Unpacking libxslt1.1:amd64 (1.1.32-2.2~deb10u1) ...\n", + "Preparing to unpack .../59-libxslt1.1_1.1.34-4_amd64.deb ...\n", + "Unpacking libxslt1.1:amd64 (1.1.34-4) ...\n", "Selecting previously unselected package proj-bin.\n", - "Preparing to unpack .../62-proj-bin_5.2.0-1_amd64.deb ...\n", - "Unpacking proj-bin (5.2.0-1) ...\n", + "Preparing to unpack .../60-proj-bin_7.2.1-1_amd64.deb ...\n", + "Unpacking proj-bin (7.2.1-1) ...\n", "Selecting previously unselected package python3-affine.\n", - "Preparing to unpack .../63-python3-affine_2.2.2-1_all.deb ...\n", - "Unpacking python3-affine (2.2.2-1) ...\n", + "Preparing to unpack .../61-python3-affine_2.3.0-2_all.deb ...\n", + "Unpacking python3-affine (2.3.0-2) ...\n", "Selecting previously unselected package python3-attr.\n", - "Preparing to unpack .../64-python3-attr_18.2.0-1_all.deb ...\n", - "Unpacking python3-attr (18.2.0-1) ...\n", + "Preparing to unpack .../62-python3-attr_20.3.0-1_all.deb ...\n", + "Unpacking python3-attr (20.3.0-1) ...\n", "Selecting previously unselected package python3-soupsieve.\n", - "Preparing to unpack .../65-python3-soupsieve_1.8+dfsg-1_all.deb ...\n", - "Unpacking python3-soupsieve (1.8+dfsg-1) ...\n", + "Preparing to unpack .../63-python3-soupsieve_2.2.1-1_all.deb ...\n", + "Unpacking python3-soupsieve (2.2.1-1) ...\n", "Selecting previously unselected package python3-bs4.\n", - "Preparing to unpack .../66-python3-bs4_4.7.1-1_all.deb ...\n", - "Unpacking python3-bs4 (4.7.1-1) ...\n", + "Preparing to unpack .../64-python3-bs4_4.9.3-1_all.deb ...\n", + "Unpacking python3-bs4 (4.9.3-1) ...\n", + "Selecting previously unselected package python3-certifi.\n", + "Preparing to unpack .../65-python3-certifi_2020.6.20-1_all.deb ...\n", + "Unpacking python3-certifi (2020.6.20-1) ...\n", "Selecting previously unselected package python3-chardet.\n", - "Preparing to unpack .../67-python3-chardet_3.0.4-3_all.deb ...\n", - "Unpacking python3-chardet (3.0.4-3) ...\n", + "Preparing to unpack .../66-python3-chardet_4.0.0-1_all.deb ...\n", + "Unpacking python3-chardet (4.0.0-1) ...\n", "Selecting previously unselected package python3-colorama.\n", - "Preparing to unpack .../68-python3-colorama_0.3.7-1_all.deb ...\n", - "Unpacking python3-colorama (0.3.7-1) ...\n", + "Preparing to unpack .../67-python3-colorama_0.4.4-1_all.deb ...\n", + "Unpacking python3-colorama (0.4.4-1) ...\n", "Selecting previously unselected package python3-click.\n", - "Preparing to unpack .../69-python3-click_7.0-1_all.deb ...\n", - "Unpacking python3-click (7.0-1) ...\n", + "Preparing to unpack .../68-python3-click_7.1.2-1_all.deb ...\n", + "Unpacking python3-click (7.1.2-1) ...\n", "Selecting previously unselected package python3-click-plugins.\n", - "Preparing to unpack .../70-python3-click-plugins_1.0.4-1_all.deb ...\n", - "Unpacking python3-click-plugins (1.0.4-1) ...\n", + "Preparing to unpack .../69-python3-click-plugins_1.1.1-3_all.deb ...\n", + "Unpacking python3-click-plugins (1.1.1-3) ...\n", "Selecting previously unselected package python3-cligj.\n", - "Preparing to unpack .../71-python3-cligj_0.5.0-1_all.deb ...\n", - "Unpacking python3-cligj (0.5.0-1) ...\n", + "Preparing to unpack .../70-python3-cligj_0.7.1-1_all.deb ...\n", + "Unpacking python3-cligj (0.7.1-1) ...\n", + "Selecting previously unselected package python3-six.\n", + "Preparing to unpack .../71-python3-six_1.16.0-2_all.deb ...\n", + "Unpacking python3-six (1.16.0-2) ...\n", "Selecting previously unselected package python3-webencodings.\n", - "Preparing to unpack .../72-python3-webencodings_0.5.1-1_all.deb ...\n", - "Unpacking python3-webencodings (0.5.1-1) ...\n", + "Preparing to unpack .../72-python3-webencodings_0.5.1-2_all.deb ...\n", + "Unpacking python3-webencodings (0.5.1-2) ...\n", "Selecting previously unselected package python3-html5lib.\n", - "Preparing to unpack .../73-python3-html5lib_1.0.1-1_all.deb ...\n", - "Unpacking python3-html5lib (1.0.1-1) ...\n", + "Preparing to unpack .../73-python3-html5lib_1.1-3_all.deb ...\n", + "Unpacking python3-html5lib (1.1-3) ...\n", "Selecting previously unselected package python3-lxml:amd64.\n", - "Preparing to unpack .../74-python3-lxml_4.3.2-1+deb10u4_amd64.deb ...\n", - "Unpacking python3-lxml:amd64 (4.3.2-1+deb10u4) ...\n", + "Preparing to unpack .../74-python3-lxml_4.6.3+dfsg-0.1+deb11u1_amd64.deb ...\n", + "Unpacking python3-lxml:amd64 (4.6.3+dfsg-0.1+deb11u1) ...\n", "Selecting previously unselected package python3-numpy.\n", - "Preparing to unpack .../75-python3-numpy_1%3a1.16.2-1_amd64.deb ...\n", - "Unpacking python3-numpy (1:1.16.2-1) ...\n", + "Preparing to unpack .../75-python3-numpy_1%3a1.19.5-1_amd64.deb ...\n", + "Unpacking python3-numpy (1:1.19.5-1) ...\n", "Selecting previously unselected package python3-pyparsing.\n", - "Preparing to unpack .../76-python3-pyparsing_2.2.0+dfsg1-2_all.deb ...\n", - "Unpacking python3-pyparsing (2.2.0+dfsg1-2) ...\n", + "Preparing to unpack .../76-python3-pyparsing_2.4.7-1_all.deb ...\n", + "Unpacking python3-pyparsing (2.4.7-1) ...\n", "Selecting previously unselected package python3-snuggs.\n", - "Preparing to unpack .../77-python3-snuggs_1.4.3-1_all.deb ...\n", - "Unpacking python3-snuggs (1.4.3-1) ...\n", + "Preparing to unpack .../77-python3-snuggs_1.4.7-2_all.deb ...\n", + "Unpacking python3-snuggs (1.4.7-2) ...\n", "Selecting previously unselected package python3-rasterio.\n", - "Preparing to unpack .../78-python3-rasterio_1.0.21-1_amd64.deb ...\n", - "Unpacking python3-rasterio (1.0.21-1) ...\n", - "Setting up liblcms2-2:amd64 (2.9-3) ...\n", - "Setting up python3-attr (18.2.0-1) ...\n", - "Setting up mysql-common (5.8+1.0.5) ...\n", + "Preparing to unpack .../78-python3-rasterio_1.2.0-1_amd64.deb ...\n", + "Unpacking python3-rasterio (1.2.0-1) ...\n", + "Setting up liblcms2-2:amd64 (2.12~rc1-2) ...\n", + "Setting up python3-attr (20.3.0-1) ...\n", + "Setting up mysql-common (5.8+1.0.7) ...\n", "update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode\n", - "Setting up proj-data (5.2.0-1) ...\n", - "Setting up python3-colorama (0.3.7-1) ...\n", - "Setting up libcharls2:amd64 (2.0.0+dfsg-1) ...\n", + "Setting up proj-data (7.2.1-1) ...\n", + "Setting up libicu67:amd64 (67.1-7) ...\n", + "Setting up libogdi4.1 (4.1.0+ds-5) ...\n", + "Setting up libqhull8.0:amd64 (2020.2-3) ...\n", + "Setting up python3-colorama (0.4.4-1) ...\n", + "Setting up libcharls2:amd64 (2.2.0+dfsg-2) ...\n", "Setting up libminizip1:amd64 (1.1-8+b1) ...\n", - "Setting up libproj13:amd64 (5.2.0-1) ...\n", - "Setting up libpq5:amd64 (11.14-0+deb10u1) ...\n", - "Setting up proj-bin (5.2.0-1) ...\n", - "Setting up libqhull7:amd64 (2015.2-4) ...\n", - "Setting up python3-click (7.0-1) ...\n", - "Setting up libepsilon1:amd64 (0.9.2+dfsg-4) ...\n", - "Setting up libjbig0:amd64 (2.1-3.1+b2) ...\n", - "Setting up python3-webencodings (0.5.1-1) ...\n", - "Setting up libgeos-3.7.1:amd64 (3.7.1-1) ...\n", - "Setting up libaec0:amd64 (1.0.2-1) ...\n", - "Setting up libicu63:amd64 (63.1-6+deb10u2) ...\n", - "Setting up gdal-data (2.4.0+dfsg-1) ...\n", - "Setting up poppler-data (0.4.9-2) ...\n", - "Setting up mariadb-common (1:10.3.31-0+deb10u1) ...\n", + "Setting up libaom0:amd64 (1.0.0.errata1-3) ...\n", + "Setting up libpq5:amd64 (13.7-0+deb11u1) ...\n", + "Setting up python3-click (7.1.2-1) ...\n", + "Setting up libepsilon1:amd64 (0.9.2+dfsg-5) ...\n", + "Setting up python3-webencodings (0.5.1-2) ...\n", + "Setting up libaec0:amd64 (1.0.4-1) ...\n", + "Setting up gdal-data (3.2.2+dfsg-2+deb11u1) ...\n", + "Setting up poppler-data (0.4.10-1) ...\n", + "Setting up libcfitsio9:amd64 (3.490-3) ...\n", + "Setting up mariadb-common (1:10.5.15-0+deb11u1) ...\n", "update-alternatives: using /etc/mysql/mariadb.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode\n", - "Setting up python3-chardet (3.0.4-3) ...\n", - "Setting up libjpeg62-turbo:amd64 (1:1.5.2-2+deb10u1) ...\n", - "Setting up python3-pyparsing (2.2.0+dfsg1-2) ...\n", - "Setting up libnspr4:amd64 (2:4.20-1) ...\n", - "Setting up libwebp6:amd64 (0.6.1-2+deb10u1) ...\n", - "Setting up libgeos-c1v5:amd64 (3.7.1-1) ...\n", - "Setting up python3-click-plugins (1.0.4-1) ...\n", - "Setting up libmariadb3:amd64 (1:10.3.31-0+deb10u1) ...\n", - "Setting up fonts-dejavu-core (2.37-1) ...\n", - "Setting up python3-html5lib (1.0.1-1) ...\n", - "Setting up libltdl7:amd64 (2.4.6-9) ...\n", - "Setting up libgfortran5:amd64 (8.3.0-6) ...\n", - "Setting up libhdf4-0-alt (4.2.13-4) ...\n", - "Setting up libgif7:amd64 (5.1.4-3) ...\n", - "Setting up liburiparser1:amd64 (0.9.1-1+deb10u1) ...\n", - "Setting up libfreexl1:amd64 (1.0.5-3) ...\n", - "Setting up libfyba0:amd64 (4.1.1-6) ...\n", - "Setting up libkmlbase1:amd64 (1.3.0-7) ...\n", - "Setting up libopenjp2-7:amd64 (2.3.0-2+deb10u2) ...\n", - "Setting up libtiff5:amd64 (4.1.0+git191117-2~deb10u3) ...\n", - "Setting up python3-affine (2.2.2-1) ...\n", - "Setting up libxml2:amd64 (2.9.4+dfsg1-7+deb10u2) ...\n", - "Setting up python3-soupsieve (1.8+dfsg-1) ...\n", - "Setting up libsz2:amd64 (1.0.2-1) ...\n", - "Setting up libkmlxsd1:amd64 (1.3.0-7) ...\n", - "Setting up libkmldom1:amd64 (1.3.0-7) ...\n", - "Setting up libspatialite7:amd64 (4.3.0a-5+b2) ...\n", - "Setting up libogdi3.2 (3.2.1+ds-4) ...\n", - "Setting up libxerces-c3.2:amd64 (3.2.2+debian-1+deb10u1) ...\n", - "Setting up libkmlengine1:amd64 (1.3.0-7) ...\n", - "Setting up libkmlconvenience1:amd64 (1.3.0-7) ...\n", - "Setting up fontconfig-config (2.13.1-2) ...\n", - "Setting up python3-cligj (0.5.0-1) ...\n", - "Setting up libdap25:amd64 (3.20.3-1) ...\n", - "Setting up libnss3:amd64 (2:3.42.1-1+deb10u5) ...\n", - "Setting up libdapserver7v5:amd64 (3.20.3-1) ...\n", - "Setting up python3-bs4 (4.7.1-1) ...\n", - "Setting up libgeotiff2:amd64 (1.4.3-1) ...\n", - "Setting up libblas3:amd64 (3.8.0-2) ...\n", + "Setting up python3-six (1.16.0-2) ...\n", + "Setting up libblas3:amd64 (3.9.0-3) ...\n", "update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode\n", - "Setting up libkmlregionator1:amd64 (1.3.0-7) ...\n", - "Setting up libhdf5-103:amd64 (1.10.4+repack-10) ...\n", - "Setting up libodbc1:amd64 (2.3.6-0.1) ...\n", - "Setting up libxslt1.1:amd64 (1.1.32-2.2~deb10u1) ...\n", - "Setting up libdapclient6v5:amd64 (3.20.3-1) ...\n", - "Setting up libfontconfig1:amd64 (2.13.1-2) ...\n", - "Setting up liblapack3:amd64 (3.8.0-2) ...\n", + "Setting up python3-chardet (4.0.0-1) ...\n", + "Setting up python3-pyparsing (2.4.7-1) ...\n", + "Setting up python3-certifi (2020.6.20-1) ...\n", + "Setting up libnspr4:amd64 (2:4.29-1) ...\n", + "Setting up python3-click-plugins (1.1.1-3) ...\n", + "Setting up libmariadb3:amd64 (1:10.5.15-0+deb11u1) ...\n", + "Setting up python3-html5lib (1.1-3) ...\n", + "Setting up libltdl7:amd64 (2.4.6-15) ...\n", + "Setting up libgfortran5:amd64 (10.2.1-6) ...\n", + "Setting up libhdf4-0-alt (4.2.15-3) ...\n", + "Setting up libgif7:amd64 (5.1.9-2) ...\n", + "Setting up liburiparser1:amd64 (0.9.4+dfsg-1+deb11u1) ...\n", + "Setting up libnuma1:amd64 (2.0.12-1+b1) ...\n", + "Setting up libfreexl1:amd64 (1.0.6-1) ...\n", + "Setting up libgeos-3.9.0:amd64 (3.9.0-1) ...\n", + "Setting up libfyba0:amd64 (4.1.1-7) ...\n", + "Setting up libkmlbase1:amd64 (1.3.0-9) ...\n", + "Setting up libdav1d4:amd64 (0.7.1-3) ...\n", + "Setting up libopenjp2-7:amd64 (2.4.0-3) ...\n", + "Setting up python3-affine (2.3.0-2) ...\n", + "Setting up libde265-0:amd64 (1.0.8-1) ...\n", + "Setting up libproj19:amd64 (7.2.1-1) ...\n", + "Setting up libxml2:amd64 (2.9.10+dfsg-6.7+deb11u1) ...\n", + "Setting up python3-soupsieve (2.2.1-1) ...\n", + "Setting up libsz2:amd64 (1.0.4-1) ...\n", + "Setting up libkmldom1:amd64 (1.3.0-9) ...\n", + "Setting up liblapack3:amd64 (3.9.0-3) ...\n", "update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode\n", - "Setting up libarpack2:amd64 (3.7.0-2) ...\n", - "Setting up libsuperlu5:amd64 (5.2.1+dfsg1-4) ...\n", - "Setting up libpoppler82:amd64 (0.71.0-5) ...\n", - "Setting up libnetcdf13:amd64 (1:4.6.2-1) ...\n", - "Setting up python3-numpy (1:1.16.2-1) ...\n", - "Setting up python3-lxml:amd64 (4.3.2-1+deb10u4) ...\n", - "Setting up libarmadillo9 (1:9.200.7+dfsg-1) ...\n", - "Setting up python3-snuggs (1.4.3-1) ...\n", - "Setting up odbcinst (2.3.6-0.1) ...\n", - "Setting up odbcinst1debian2:amd64 (2.3.6-0.1) ...\n", - "Setting up libgdal20 (2.4.0+dfsg-1+b1) ...\n", - "Setting up python3-rasterio (1.0.21-1) ...\n", - "Processing triggers for libc-bin (2.28-10) ...\n", - "Processing triggers for man-db (2.8.5-2) ...\n" + "Setting up libxerces-c3.2:amd64 (3.2.3+debian-3) ...\n", + "Setting up libkmlengine1:amd64 (1.3.0-9) ...\n", + "Setting up python3-cligj (0.7.1-1) ...\n", + "Setting up libarpack2:amd64 (3.8.0-1) ...\n", + "Setting up libx265-192:amd64 (3.4-2) ...\n", + "Setting up libsuperlu5:amd64 (5.2.2+dfsg1-2) ...\n", + "Setting up proj-bin (7.2.1-1) ...\n", + "Setting up libnss3:amd64 (2:3.61-1+deb11u2) ...\n", + "Setting up python3-bs4 (4.9.3-1) ...\n", + "Setting up libgeotiff5:amd64 (1.6.0-1) ...\n", + "Setting up libdap27:amd64 (3.20.7-6) ...\n", + "Setting up libgeos-c1v5:amd64 (3.9.0-1) ...\n", + "Setting up libodbc1:amd64 (2.3.6-0.1+b1) ...\n", + "Setting up python3-numpy (1:1.19.5-1) ...\n", + "Setting up libhdf5-103-1:amd64 (1.10.6+repack-4+deb11u1) ...\n", + "Setting up librttopo1:amd64 (1.1.0-2) ...\n", + "Setting up libpoppler102:amd64 (20.09.0-3.1) ...\n", + "Setting up libxslt1.1:amd64 (1.1.34-4) ...\n", + "Setting up libdapclient6v5:amd64 (3.20.7-6) ...\n", + "Setting up libhdf5-hl-100:amd64 (1.10.6+repack-4+deb11u1) ...\n", + "Setting up libspatialite7:amd64 (5.0.1-2) ...\n", + "Setting up libarmadillo10 (1:10.1.2+dfsg-6+b1) ...\n", + "Setting up libheif1:amd64 (1.11.0-1) ...\n", + "Setting up python3-lxml:amd64 (4.6.3+dfsg-0.1+deb11u1) ...\n", + "Setting up libnetcdf18:amd64 (1:4.7.4-1) ...\n", + "Setting up python3-snuggs (1.4.7-2) ...\n", + "Setting up odbcinst (2.3.6-0.1+b1) ...\n", + "Setting up odbcinst1debian2:amd64 (2.3.6-0.1+b1) ...\n", + "Setting up libgdal28 (3.2.2+dfsg-2+deb11u1) ...\n", + "Setting up python3-rasterio (1.2.0-1) ...\n", + "Processing triggers for libc-bin (2.31-13+deb11u3) ...\n", + "Processing triggers for man-db (2.9.4-2) ...\n" ] } ], @@ -1441,7 +1417,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "id": "b9e367a0-26ce-42ce-bb04-6a432f41876e", "metadata": {}, "outputs": [ @@ -1451,8 +1427,7 @@ "text": [ "LC08_L1TP_025033_20201007_20201016_01_T1 1\n", "LC08_L1TP_025033_20201007_20201016_01_T1 2\n", - "LC08_L1TP_025033_20201007_20201016_01_T1 3\n", - "ERROR 4: output/result-LC08_L1TP_025033_20201007_20201016_01_T1.png: No such file or directory\n" + "LC08_L1TP_025033_20201007_20201016_01_T1 3\n" ] } ], @@ -1465,7 +1440,7 @@ "id": "4199910a-1056-455c-ae9d-669296441aed", "metadata": {}, "source": [ - "Note, the \"ERROR 4\" is expected." + "*Note: if you get an \"ERROR 4\" it is expected in earlier versions of rasterio.*" ] }, { @@ -1478,7 +1453,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "id": "db9f26aa-6317-4834-8bf1-972c8b3cc032", "metadata": {}, "outputs": [ @@ -1487,8 +1462,8 @@ "output_type": "stream", "text": [ "total 192M\n", - "-rw-r--r-- 1 learner learner 192M Feb 14 20:36 \u001b[0m\u001b[01;35mresult-LC08_L1TP_025033_20201007_20201016_01_T1.png\u001b[0m\n", - "-rw-r--r-- 1 learner learner 910 Feb 14 20:36 result-LC08_L1TP_025033_20201007_20201016_01_T1.png.aux.xml\n" + "-rw-r--r-- 1 learner learner 192M May 20 16:47 \u001b[0m\u001b[01;35mresult-LC08_L1TP_025033_20201007_20201016_01_T1.png\u001b[0m\n", + "-rw-r--r-- 1 learner learner 941 May 20 16:47 result-LC08_L1TP_025033_20201007_20201016_01_T1.png.aux.xml\n" ] } ], From 2237859fb0a25f25d07e216f60b5b2ad5ec072ef Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 12:04:51 -0500 Subject: [PATCH 17/21] Use system libs to simulate raw machine --- scripts/jupyter-lab.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/jupyter-lab.sh b/scripts/jupyter-lab.sh index 5f131d6..98cefa8 100755 --- a/scripts/jupyter-lab.sh +++ b/scripts/jupyter-lab.sh @@ -8,7 +8,7 @@ echo "=== jupyterlab.sh Install and run JupyterLab locally" echo "+++ installing jupyter" python3 -m venv .venv -. .venv/bin/activate +. .venv/bin/activate --system-site-packages python3 -m pip install pip --upgrade python3 -m pip install --upgrade jupyterlab From c57d21b88a9ced8d451e349208596edef743d51a Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 12:13:35 -0500 Subject: [PATCH 18/21] GCP: Cleanup VM install --- scripts/gcp-create.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gcp-create.sh b/scripts/gcp-create.sh index 1a62094..2d7f8de 100755 --- a/scripts/gcp-create.sh +++ b/scripts/gcp-create.sh @@ -41,7 +41,7 @@ done echo "+++ configuring VM" gcloud compute ssh --zone=$ZONE $NAME@$VM --ssh-flag='-A' < .ssh/known_hosts echo "set enable-bracketed-paste off" > ~/.inputrc git config --global color.ui auto From c2783adb6701d177ce6b1e89e2b68aba94e62974 Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 12:35:18 -0500 Subject: [PATCH 19/21] GCP: Symlink is needed for install after venv create --- scripts/jupyter-lab.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/jupyter-lab.sh b/scripts/jupyter-lab.sh index 98cefa8..a2ae7b4 100755 --- a/scripts/jupyter-lab.sh +++ b/scripts/jupyter-lab.sh @@ -8,7 +8,9 @@ echo "=== jupyterlab.sh Install and run JupyterLab locally" echo "+++ installing jupyter" python3 -m venv .venv -. .venv/bin/activate --system-site-packages +. .venv/bin/activate + +ln -sfv /usr/lib/python3/dist-packages .venv/lib/python3.*/ # simulate VM behavior for apt-get install python3-rasterio python3 -m pip install pip --upgrade python3 -m pip install --upgrade jupyterlab From 3fc7dc51fb316a449e2c3e2737f63eb3d77a7c9e Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 17:44:32 +0000 Subject: [PATCH 20/21] GCP: Render fixed packages issue. --- content/GCP/06_running_analysis.ipynb | 92 +++++++++++++-------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/content/GCP/06_running_analysis.ipynb b/content/GCP/06_running_analysis.ipynb index 1c34d1b..d33b896 100644 --- a/content/GCP/06_running_analysis.ipynb +++ b/content/GCP/06_running_analysis.ipynb @@ -293,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "id": "05fadd30-4f35-4a93-b713-cc132131b948", "metadata": { "tags": [ @@ -306,10 +306,10 @@ "output_type": "stream", "text": [ "Reading package lists... Done\n", - "Building dependency tree \n", + "Building dependency tree... Done\n", "Reading state information... Done\n", - "git is already the newest version (1:2.20.1-2+deb10u3).\n", - "0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.\n" + "git is already the newest version (1:2.30.2-1).\n", + "0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.\n" ] } ], @@ -319,7 +319,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "96db6a66-3fbf-419a-b8c8-dbb27639e990", "metadata": {}, "outputs": [], @@ -329,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "36554c99-ba08-4733-8ef2-e68d42d0d2b7", "metadata": {}, "outputs": [ @@ -342,7 +342,7 @@ "remote: Counting objects: 100% (10/10), done.\u001b[K\n", "remote: Compressing objects: 100% (9/9), done.\u001b[K\n", "remote: Total 117 (delta 1), reused 9 (delta 1), pack-reused 107\u001b[K\n", - "Receiving objects: 100% (117/117), 20.66 KiB | 556.00 KiB/s, done.\n", + "Receiving objects: 100% (117/117), 20.66 KiB | 542.00 KiB/s, done.\n", "Resolving deltas: 100% (44/44), done.\n" ] } @@ -361,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "90c1cda7-60d4-44bb-84f8-e776a77a94ab", "metadata": {}, "outputs": [], @@ -382,7 +382,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "55b628d5-6e5c-45a5-9cd3-c129db9cdcd2", "metadata": {}, "outputs": [ @@ -391,14 +391,14 @@ "output_type": "stream", "text": [ "total 32\n", - "-rw-r--r-- 1 learner learner 964 May 20 15:58 ReadMe.md\n", - "-rw-r--r-- 1 learner learner 72 May 20 15:58 clean.sh\n", - "-rw-r--r-- 1 learner learner 280 May 20 15:58 download.sh\n", - "-rw-r--r-- 1 learner learner 113 May 20 15:58 get-data.sh\n", - "-rw-r--r-- 1 learner learner 345 May 20 15:58 get-index.sh\n", - "-rw-r--r-- 1 learner learner 613 May 20 15:58 process_sat.py\n", - "-rw-r--r-- 1 learner learner 95 May 20 15:58 search.json\n", - "-rw-r--r-- 1 learner learner 851 May 20 15:58 search.py\n" + "-rw-r--r-- 1 learner learner 964 May 20 17:41 ReadMe.md\n", + "-rw-r--r-- 1 learner learner 72 May 20 17:41 clean.sh\n", + "-rw-r--r-- 1 learner learner 280 May 20 17:41 download.sh\n", + "-rw-r--r-- 1 learner learner 113 May 20 17:41 get-data.sh\n", + "-rw-r--r-- 1 learner learner 345 May 20 17:41 get-index.sh\n", + "-rw-r--r-- 1 learner learner 613 May 20 17:41 process_sat.py\n", + "-rw-r--r-- 1 learner learner 95 May 20 17:41 search.json\n", + "-rw-r--r-- 1 learner learner 851 May 20 17:41 search.py\n" ] } ], @@ -420,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "e56ab74a-ae6d-4602-a26b-4a2656bd40cd", "metadata": {}, "outputs": [ @@ -469,7 +469,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "bbe85b75-c7cd-40ed-a3b0-37cbd0a5f52e", "metadata": {}, "outputs": [ @@ -487,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "18a9b71c-5871-4ce2-a202-b48ad04e8d38", "metadata": {}, "outputs": [ @@ -515,7 +515,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "2cdaf24c-c4aa-4e80-9236-939e7c982916", "metadata": {}, "outputs": [], @@ -533,7 +533,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "b005876c-f9af-43d6-80c6-f04295413b9b", "metadata": {}, "outputs": [ @@ -542,7 +542,7 @@ "output_type": "stream", "text": [ "total 2.5G\n", - "-rw-r--r-- 1 learner learner 2.5G May 20 15:59 index.csv\n" + "-rw-r--r-- 1 learner learner 2.5G May 20 17:42 index.csv\n" ] } ], @@ -560,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "ffe969db-d207-44fe-8957-8d129c76ee8f", "metadata": {}, "outputs": [ @@ -624,7 +624,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "c5e300c3-e1f3-4cd4-9679-77725e61c4db", "metadata": {}, "outputs": [ @@ -670,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "c9872510-4265-4b0e-aeb5-5a829ff69b24", "metadata": {}, "outputs": [ @@ -701,7 +701,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "6912a9ec-0f9b-4500-ba20-d4280592b323", "metadata": {}, "outputs": [ @@ -727,7 +727,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "3572c518-df83-4906-bfa6-a37bde2a5063", "metadata": {}, "outputs": [ @@ -762,7 +762,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "cccec3e1-0dcd-4e3b-a059-a884f5219b66", "metadata": { "scrolled": true, @@ -777,20 +777,20 @@ "text": [ "+++ gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_ANG.txt...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B1.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B10.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B1.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B3.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B4.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B11.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B5.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B7.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B3.TIF...\n", - "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B2.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B6.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B2.TIF...\n", + "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B7.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B8.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_B9.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_BQA.TIF...\n", "Copying gs://gcp-public-data-landsat/LC08/01/025/033/LC08_L1TP_025033_20201007_20201016_01_T1/LC08_L1TP_025033_20201007_20201016_01_T1_MTL.txt...\n", - "- [14/14 files][952.9 MiB/952.9 MiB] 100% Done 56.4 MiB/s ETA 00:00:00 \n", + "| [14/14 files][952.9 MiB/952.9 MiB] 100% Done 18.8 MiB/s ETA 00:00:00 \n", "Operation completed over 14 objects/952.9 MiB. \n" ] } @@ -809,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "a37c1567-14b5-4dc7-bc27-d1b84411fce1", "metadata": {}, "outputs": [ @@ -818,8 +818,8 @@ "output_type": "stream", "text": [ "total 2564792\n", - "drwxr-xr-x 2 learner learner 4096 May 20 16:00 \u001b[0m\u001b[01;34mLC08_L1TP_025033_20201007_20201016_01_T1\u001b[0m\n", - "-rw-r--r-- 1 learner learner 2626336574 May 20 15:59 index.csv\n" + "drwxr-xr-x 2 learner learner 4096 May 20 17:42 \u001b[0m\u001b[01;34mLC08_L1TP_025033_20201007_20201016_01_T1\u001b[0m\n", + "-rw-r--r-- 1 learner learner 2626336574 May 20 17:42 index.csv\n" ] } ], @@ -855,7 +855,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "0c027e92-ae6f-4152-b8d6-5a70172de3e2", "metadata": {}, "outputs": [ @@ -899,7 +899,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "0d6f55c9-3e2c-47d7-b4d0-b984fedc110e", "metadata": {}, "outputs": [ @@ -917,7 +917,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "77999a80-7cfd-46d3-86a6-05d199f7e66d", "metadata": {}, "outputs": [ @@ -947,7 +947,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "b5a2b29b-9c1d-4376-a3eb-4a3dc4bac160", "metadata": { "scrolled": true, @@ -1083,7 +1083,7 @@ "Get:77 http://deb.debian.org/debian bullseye/main amd64 python3-pyparsing all 2.4.7-1 [109 kB]\n", "Get:78 http://deb.debian.org/debian bullseye/main amd64 python3-snuggs all 1.4.7-2 [7780 B]\n", "Get:79 http://deb.debian.org/debian bullseye/main amd64 python3-rasterio amd64 1.2.0-1 [839 kB]\n", - "Fetched 53.2 MB in 1s (52.4 MB/s) \n", + "Fetched 53.2 MB in 1s (104 MB/s) \n", "Extracting templates from packages: 100%\n", "Selecting previously unselected package poppler-data.\n", "(Reading database ... 63527 files and directories currently installed.)\n", @@ -1417,7 +1417,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "id": "b9e367a0-26ce-42ce-bb04-6a432f41876e", "metadata": {}, "outputs": [ @@ -1453,7 +1453,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "id": "db9f26aa-6317-4834-8bf1-972c8b3cc032", "metadata": {}, "outputs": [ @@ -1462,8 +1462,8 @@ "output_type": "stream", "text": [ "total 192M\n", - "-rw-r--r-- 1 learner learner 192M May 20 16:47 \u001b[0m\u001b[01;35mresult-LC08_L1TP_025033_20201007_20201016_01_T1.png\u001b[0m\n", - "-rw-r--r-- 1 learner learner 941 May 20 16:47 result-LC08_L1TP_025033_20201007_20201016_01_T1.png.aux.xml\n" + "-rw-r--r-- 1 learner learner 192M May 20 17:43 \u001b[0m\u001b[01;35mresult-LC08_L1TP_025033_20201007_20201016_01_T1.png\u001b[0m\n", + "-rw-r--r-- 1 learner learner 941 May 20 17:43 result-LC08_L1TP_025033_20201007_20201016_01_T1.png.aux.xml\n" ] } ], From 929b5921ce53eb045eacab76bb6cc000d9d4ba4d Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Fri, 20 May 2022 18:23:41 +0000 Subject: [PATCH 21/21] GCP: Minor updates due to the new "welcome" page --- content/GCP/01_intro_to_cloud_console.ipynb | 4 ++-- content/GCP/02_intro_to_compute.ipynb | 2 +- content/GCP/03_intro_to_cloud_storage.ipynb | 2 +- content/GCP/07_monitoring_costs.ipynb | 9 ++++----- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/content/GCP/01_intro_to_cloud_console.ipynb b/content/GCP/01_intro_to_cloud_console.ipynb index 5485ed5..3e27a2b 100644 --- a/content/GCP/01_intro_to_cloud_console.ipynb +++ b/content/GCP/01_intro_to_cloud_console.ipynb @@ -181,8 +181,8 @@ "\n", "From left to right of the blue top navigation bar we have the following items (hover over the item with your mouse to see the name):\n", " 1. Navigation Menu (often called the hamburger) allows you to go to each project and services page (shown below).\n", - " 2. Dashboard (\"Google Cloud Platform\") provides an overview of your project.\n", - " * Click it and note resources, billing, and platform Status\n", + " 2. Welcome (\"Google Cloud Platform\") provides an overview of your project.\n", + " * Click \"Dashboard\" it and note resources, billing, and platform Status\n", " * This page is customizable and may look different.\n", " 3. Project selection button showing the current project name with a drop-down arrow.\n", " 4. Search bar - type in service or keywords\n", diff --git a/content/GCP/02_intro_to_compute.ipynb b/content/GCP/02_intro_to_compute.ipynb index 950ef9a..9bdafaf 100644 --- a/content/GCP/02_intro_to_compute.ipynb +++ b/content/GCP/02_intro_to_compute.ipynb @@ -145,7 +145,7 @@ "\n", "To view the project activity we do the following:\n", "\n", - " * Navigate to the project **Dashboard** by clicking on \"Google Cloud Platform\" on the left side of the top blue bar.\n", + " * Navigate to the project **Dashboard** by clicking on \"Google Cloud Platform\" on the left side of the top blue bar and clicking the \"*Dashboard*\" link.\n", " * Select **Activity** tab just below the top blue bar.\n", " * Look for the row with **Create VM** on the top of the table. This shows that the *VM Instance* was created.\n", " * Expand the detail by clicking the **down arrow** on the right side of the row. You can see what identity created the bucket and the name. The rest of the information details the initial settings that you configured when creating the virtual machine. The details are not really important at this time, just know they exist.\n", diff --git a/content/GCP/03_intro_to_cloud_storage.ipynb b/content/GCP/03_intro_to_cloud_storage.ipynb index e828138..42ddb9c 100644 --- a/content/GCP/03_intro_to_cloud_storage.ipynb +++ b/content/GCP/03_intro_to_cloud_storage.ipynb @@ -110,7 +110,7 @@ "\n", "To view the project activity we do the following:\n", "\n", - " * Navigate to the project **Dashboard** by clicking on \"Google Cloud Platform\" on the left side of the top blue bar.\n", + " * Navigate to the project **Dashboard** by clicking on \"Google Cloud Platform\" on the left side of the top blue bar and clicking on the \"*Dashboard*\" link.\n", " * Select **Activity** tab just below the top blue bar.\n", " * Look for the row with **Create Bucket** on the top of the table. This shows that the bucket was created.\n", " * Expand the detail by clicking the **down arrow** on the right side of the row. You can see what identity created the bucket and the name. The rest of the information details the initial settings that you configured when creating the bucket. The details are not really important at this time, just know they exist.\n", diff --git a/content/GCP/07_monitoring_costs.ipynb b/content/GCP/07_monitoring_costs.ipynb index 8407ccb..521ca09 100644 --- a/content/GCP/07_monitoring_costs.ipynb +++ b/content/GCP/07_monitoring_costs.ipynb @@ -41,10 +41,9 @@ "Projects and Billing Accounts are two different things in Google Cloud. In order for a Project operate it must have a Billing Account to charge any expenses to. Even if a project is utilizing credits it must have a Billing Account associated with it. Projects within an organization will often have the Billing Account controlled directly by the organization.\n", "\n", "To find out more about the Billing Account associated with your project do the following:\n", - " * **Navigation Menu -> Home** (this will ensure your project is selected)\n", - " * Double check that the Project ID and name in the \"Project Info\" card is correct.\n", - " * Note the billing card, but do not click on it.\n", - " * **Navigation Menu -> Billing** \n", + " * Click **Google Cloud Platform** (this will ensure your project is selected)\n", + " * Double check that the Project ID and name is correct.\n", + " * Select **Navigation Menu -> Billing** \n", " * If you get a \"You have multiple billing accounts\" select \"**Go to linked billing account**\"\n", " * If you get a \"This project has no billing account\" you cannot incur any charges on this account. Since you do not have a billing account you have no charges to monitor or set alerts on. You will need to associate or create a billing account to do anything.\n", " * Select **Account Management** on the *Left Sidebar* of the Billing page.\n", @@ -84,7 +83,7 @@ " * \"Daily\"\n", " * Bar chart (bar chart graph on the right, \"Daily\" is on the left)\n", " * **Save** view\n", - " * If you cannot save the view you can also click \"Share\" and use the URL to create a bookmark for easy access.\n", + " * If you cannot save the view you can also click \"**Share**\" and use the URL to create a bookmark for easy access.\n", "\n", "![billing-report](img/billing-report.png)\n", "\n",