<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>OpenStack on 夜云泊</title>
    <link>https://lifeislife.cn/categories/openstack/</link>
    <description>feedId:57980998056508425+userId:73222296380546048 Recent content in OpenStack on 夜云泊</description>
    <generator>Hugo -- 0.163.1</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 28 Jun 2023 22:20:05 +0000</lastBuildDate>
    <atom:link href="https://lifeislife.cn/categories/openstack/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>SSH 登录 OpenStack 实例</title>
      <link>https://lifeislife.cn/posts/ssh-%E7%99%BB%E5%BD%95-openstack-%E5%AE%9E%E4%BE%8B/</link>
      <pubDate>Wed, 28 Jun 2023 22:20:05 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/ssh-%E7%99%BB%E5%BD%95-openstack-%E5%AE%9E%E4%BE%8B/</guid>
      <description>&lt;h1 id=&#34;基础配置&#34;&gt;基础配置&lt;/h1&gt;
&lt;p&gt;添加安全组规则，允许 Ping 和 SSH 访问虚拟机：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openstack security group rule create --proto icmp default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@allone:~# openstack security group rule create --proto icmp default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+---------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Field             &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Value                                                                                                                                                   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+-------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; created_at        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2023-06-28T06:26:10Z                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; description       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                                                                                                         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; direction         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ingress                                                                                                                                                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ether_type        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; IPv4                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; id                &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fe9adfc3-dc42-4680-8ecd-ed5a667e1215                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; location          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, project.domain_id&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;, project.domain_name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Default&amp;#39;&lt;/span&gt;, project.id&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;6396365541a74b6b8ea8812d1af05e70&amp;#39;&lt;/span&gt;, project.name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;admin&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;region_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; name              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; port_range_max    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; port_range_min    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; project_id        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 6396365541a74b6b8ea8812d1af05e70                                                                                                                        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; protocol          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; icmp                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; remote_group_id   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; remote_ip_prefix  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 0.0.0.0/0                                                                                                                                               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; revision_number   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;                                                                                                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; security_group_id &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; f10a3927-5e76-47b4-8691-4169348845ae                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tags              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;                                                                                                                                                      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; updated_at        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2023-06-28T06:26:10Z                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+--------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openstack security group rule create --proto tcp --dst-port &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@allone:~# openstack security group rule  create --proto tcp --dst-port &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+--------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Field             &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Value                                                                                                                                                   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+--------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; created_at        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2023-06-28T06:26:15Z                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; description       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                                                                                                                                                         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; direction         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ingress                                                                                                                                                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ether_type        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; IPv4                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; id                &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; af699cf9-5fc0-45e2-a009-0bb7828e2d1a                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; location          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, project.domain_id&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;, project.domain_name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Default&amp;#39;&lt;/span&gt;, project.id&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;6396365541a74b6b8ea8812d1af05e70&amp;#39;&lt;/span&gt;, project.name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;admin&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;region_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; name              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; port_range_max    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;                                                                                                                                                      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; port_range_min    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;                                                                                                                                                      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; project_id        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 6396365541a74b6b8ea8812d1af05e70                                                                                                                        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; protocol          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tcp                                                                                                                                                     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; remote_group_id   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; None                                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; remote_ip_prefix  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 0.0.0.0/0                                                                                                                                               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; revision_number   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;                                                                                                                                                       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; security_group_id &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; f10a3927-5e76-47b4-8691-4169348845ae                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tags              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;                                                                                                                                                      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; updated_at        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2023-06-28T06:26:15Z                                                                                                                                    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------------+-----------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;命令行方式&#34;&gt;命令行方式&lt;/h1&gt;
&lt;h2 id=&#34;生成秘钥&#34;&gt;生成秘钥&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -q -N “”
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-q&lt;/code&gt; 选项表示静默模式，即在生成密钥对的过程中不会输出任何提示信息或警告。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-N&lt;/code&gt; 选项后面可以跟一个密码作为参数。该密码将用于保护生成的私钥文件。如果不指定 &lt;code&gt;-N&lt;/code&gt; 参数，则私钥文件将不受密码保护。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;该命令会在&lt;code&gt;~/.ssh/&lt;/code&gt;目录中自动生成一对公私钥。默认私钥名称：id_rsa，默认公钥名称：id_rsa.pub&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;向 OpenStack 添加公钥，用于创建实例时选择：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@allone:~# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Field       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Value                                           &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fingerprint &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 11:36:75:e0:c3:98:4c:97:90:30:f5:69:e1:17:a9:4b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; name        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mykey                                           &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; user_id     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 9027da91a2134825a421d78db11011d0                &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openstack keypair list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@allone:~# openstack keypair list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+---------------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Name                &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Fingerprint                                     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+---------------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mykey               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 11:36:75:e0:c3:98:4c:97:90:30:f5:69:e1:17:a9:4b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ubuntu cloud server &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 67:b4:8a:64:83:4e:47:d0:7c:87:46:34:3b:03:e6:17 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+---------------------+-------------------------------------------------+
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh ubuntu@10.0.2.111
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中，&lt;code&gt;ubuntun&lt;/code&gt;是实例的用户名，&lt;code&gt;10.0.2.111&lt;/code&gt;是实例的 IP 地址。&lt;/p&gt;
&lt;h1 id=&#34;web-界面方式&#34;&gt;WEB 界面方式&lt;/h1&gt;
&lt;h2 id=&#34;创建密钥对&#34;&gt;创建密钥对&lt;/h2&gt;
&lt;p&gt;Project-Key Pairs-Create Keypairs&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-21-d58cbf697d71c5fff58fda7a8145ceae-20230628175315-733a20.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-21-d58cbf697d71c5fff58fda7a8145ceae-20230628175315-733a20.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;为密钥对起个名字：sshkey，并选择一个类型：SSH Key&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-37-56223c56c675b84ea1d375399db38175-20230628175333-06df78.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-37-56223c56c675b84ea1d375399db38175-20230628175333-06df78.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;点击创建后会弹出下载私钥的窗口，这时候需要将私钥下载到本地。并将他移动到 ssh 目录下方便管理。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 切换root用户，因为我们一直都是用root用户操作的OpenStack&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo su
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv sshkey.pem ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-54-d452e4565933506f89744f60f01d7956-20230628175349-ffaa20.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-54-d452e4565933506f89744f60f01d7956-20230628175349-ffaa20.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用公钥创建实例&#34;&gt;使用公钥创建实例&lt;/h2&gt;
&lt;p&gt;Project-Instances-Launch Instance&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-08-24889d77a26052dab99f758c54ce9483-20230628175403-9acef3.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-08-24889d77a26052dab99f758c54ce9483-20230628175403-9acef3.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;在 Key Pair 中选择刚刚创建的 sshkey。这里实际就是将创建的密钥对中的公钥放到了我们的实例中，这样我们就可以拿着本地的私钥去访问实例。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-19-5ac37e246ffbd6007356092eac047d6b-20230628175415-7f105e.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-19-5ac37e246ffbd6007356092eac047d6b-20230628175415-7f105e.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;h2 id=&#34;登录实例&#34;&gt;登录实例&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -i ~/.ssh/sshkey.pem  ubuntun@10.0.2.111
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其中&lt;code&gt;~/.ssh/sshkey.pem&lt;/code&gt;是我们下载的私钥文件，&lt;code&gt;ubuntun&lt;/code&gt;是实例的用户名，&lt;code&gt;10.0.2.111&lt;/code&gt;是实例的 IP 地址。&lt;/p&gt;
</description>
      <content:encoded><![CDATA[<h1 id="基础配置">基础配置</h1>
<p>添加安全组规则，允许 Ping 和 SSH 访问虚拟机：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openstack security group rule create --proto icmp default
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root@allone:~# openstack security group rule create --proto icmp default
</span></span><span class="line"><span class="cl">+-------------------+---------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> Field             <span class="p">|</span> Value                                                                                                                                                   <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------------+-------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> created_at        <span class="p">|</span> 2023-06-28T06:26:10Z                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> description       <span class="p">|</span>                                                                                                                                                         <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> direction         <span class="p">|</span> ingress                                                                                                                                                 <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> ether_type        <span class="p">|</span> IPv4                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> id                <span class="p">|</span> fe9adfc3-dc42-4680-8ecd-ed5a667e1215                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> location          <span class="p">|</span> <span class="nv">cloud</span><span class="o">=</span><span class="s1">&#39;&#39;</span>, project.domain_id<span class="o">=</span>, project.domain_name<span class="o">=</span><span class="s1">&#39;Default&#39;</span>, project.id<span class="o">=</span><span class="s1">&#39;6396365541a74b6b8ea8812d1af05e70&#39;</span>, project.name<span class="o">=</span><span class="s1">&#39;admin&#39;</span>, <span class="nv">region_name</span><span class="o">=</span><span class="s1">&#39;&#39;</span>, <span class="nv">zone</span><span class="o">=</span> <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> name              <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> port_range_max    <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> port_range_min    <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> project_id        <span class="p">|</span> 6396365541a74b6b8ea8812d1af05e70                                                                                                                        <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> protocol          <span class="p">|</span> icmp                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> remote_group_id   <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> remote_ip_prefix  <span class="p">|</span> 0.0.0.0/0                                                                                                                                               <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> revision_number   <span class="p">|</span> <span class="m">0</span>                                                                                                                                                       <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> security_group_id <span class="p">|</span> f10a3927-5e76-47b4-8691-4169348845ae                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> tags              <span class="p">|</span> <span class="o">[]</span>                                                                                                                                                      <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> updated_at        <span class="p">|</span> 2023-06-28T06:26:10Z                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------------+--------------------------------+
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openstack security group rule create --proto tcp --dst-port <span class="m">22</span> default
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root@allone:~# openstack security group rule  create --proto tcp --dst-port <span class="m">22</span> default
</span></span><span class="line"><span class="cl">+-------------------+--------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> Field             <span class="p">|</span> Value                                                                                                                                                   <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------------+--------------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> created_at        <span class="p">|</span> 2023-06-28T06:26:15Z                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> description       <span class="p">|</span>                                                                                                                                                         <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> direction         <span class="p">|</span> ingress                                                                                                                                                 <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> ether_type        <span class="p">|</span> IPv4                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> id                <span class="p">|</span> af699cf9-5fc0-45e2-a009-0bb7828e2d1a                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> location          <span class="p">|</span> <span class="nv">cloud</span><span class="o">=</span><span class="s1">&#39;&#39;</span>, project.domain_id<span class="o">=</span>, project.domain_name<span class="o">=</span><span class="s1">&#39;Default&#39;</span>, project.id<span class="o">=</span><span class="s1">&#39;6396365541a74b6b8ea8812d1af05e70&#39;</span>, project.name<span class="o">=</span><span class="s1">&#39;admin&#39;</span>, <span class="nv">region_name</span><span class="o">=</span><span class="s1">&#39;&#39;</span>, <span class="nv">zone</span><span class="o">=</span> <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> name              <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> port_range_max    <span class="p">|</span> <span class="m">22</span>                                                                                                                                                      <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> port_range_min    <span class="p">|</span> <span class="m">22</span>                                                                                                                                                      <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> project_id        <span class="p">|</span> 6396365541a74b6b8ea8812d1af05e70                                                                                                                        <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> protocol          <span class="p">|</span> tcp                                                                                                                                                     <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> remote_group_id   <span class="p">|</span> None                                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> remote_ip_prefix  <span class="p">|</span> 0.0.0.0/0                                                                                                                                               <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> revision_number   <span class="p">|</span> <span class="m">0</span>                                                                                                                                                       <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> security_group_id <span class="p">|</span> f10a3927-5e76-47b4-8691-4169348845ae                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> tags              <span class="p">|</span> <span class="o">[]</span>                                                                                                                                                      <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> updated_at        <span class="p">|</span> 2023-06-28T06:26:15Z                                                                                                                                    <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------------+-----------------+
</span></span></code></pre></div><h1 id="命令行方式">命令行方式</h1>
<h2 id="生成秘钥">生成秘钥</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh-keygen -q -N “”
</span></span></code></pre></div><blockquote>
<ul>
<li><code>-q</code> 选项表示静默模式，即在生成密钥对的过程中不会输出任何提示信息或警告。</li>
<li><code>-N</code> 选项后面可以跟一个密码作为参数。该密码将用于保护生成的私钥文件。如果不指定 <code>-N</code> 参数，则私钥文件将不受密码保护。</li>
</ul>
</blockquote>
<p>该命令会在<code>~/.ssh/</code>目录中自动生成一对公私钥。默认私钥名称：id_rsa，默认公钥名称：id_rsa.pub</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
</span></span></code></pre></div><p>向 OpenStack 添加公钥，用于创建实例时选择：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root@allone:~# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
</span></span><span class="line"><span class="cl">+-------------+-------------------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> Field       <span class="p">|</span> Value                                           <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------+-------------------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> fingerprint <span class="p">|</span> 11:36:75:e0:c3:98:4c:97:90:30:f5:69:e1:17:a9:4b <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> name        <span class="p">|</span> mykey                                           <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> user_id     <span class="p">|</span> 9027da91a2134825a421d78db11011d0                <span class="p">|</span>
</span></span><span class="line"><span class="cl">+-------------+-------------------------------------------------+
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">openstack keypair list
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root@allone:~# openstack keypair list
</span></span><span class="line"><span class="cl">+---------------------+-------------------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> Name                <span class="p">|</span> Fingerprint                                     <span class="p">|</span>
</span></span><span class="line"><span class="cl">+---------------------+-------------------------------------------------+
</span></span><span class="line"><span class="cl"><span class="p">|</span> mykey               <span class="p">|</span> 11:36:75:e0:c3:98:4c:97:90:30:f5:69:e1:17:a9:4b <span class="p">|</span>
</span></span><span class="line"><span class="cl"><span class="p">|</span> ubuntu cloud server <span class="p">|</span> 67:b4:8a:64:83:4e:47:d0:7c:87:46:34:3b:03:e6:17 <span class="p">|</span>
</span></span><span class="line"><span class="cl">+---------------------+-------------------------------------------------+
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh ubuntu@10.0.2.111
</span></span></code></pre></div><p>其中，<code>ubuntun</code>是实例的用户名，<code>10.0.2.111</code>是实例的 IP 地址。</p>
<h1 id="web-界面方式">WEB 界面方式</h1>
<h2 id="创建密钥对">创建密钥对</h2>
<p>Project-Key Pairs-Create Keypairs</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-21-d58cbf697d71c5fff58fda7a8145ceae-20230628175315-733a20.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-21-d58cbf697d71c5fff58fda7a8145ceae-20230628175315-733a20.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>为密钥对起个名字：sshkey，并选择一个类型：SSH Key</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-37-56223c56c675b84ea1d375399db38175-20230628175333-06df78.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-37-56223c56c675b84ea1d375399db38175-20230628175333-06df78.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>点击创建后会弹出下载私钥的窗口，这时候需要将私钥下载到本地。并将他移动到 ssh 目录下方便管理。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 切换root用户，因为我们一直都是用root用户操作的OpenStack</span>
</span></span><span class="line"><span class="cl">sudo su
</span></span><span class="line"><span class="cl">mv sshkey.pem ~/.ssh
</span></span></code></pre></div><p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-54-d452e4565933506f89744f60f01d7956-20230628175349-ffaa20.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-53-54-d452e4565933506f89744f60f01d7956-20230628175349-ffaa20.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h2 id="使用公钥创建实例">使用公钥创建实例</h2>
<p>Project-Instances-Launch Instance</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-08-24889d77a26052dab99f758c54ce9483-20230628175403-9acef3.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-08-24889d77a26052dab99f758c54ce9483-20230628175403-9acef3.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>在 Key Pair 中选择刚刚创建的 sshkey。这里实际就是将创建的密钥对中的公钥放到了我们的实例中，这样我们就可以拿着本地的私钥去访问实例。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-19-5ac37e246ffbd6007356092eac047d6b-20230628175415-7f105e.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img/17-54-19-5ac37e246ffbd6007356092eac047d6b-20230628175415-7f105e.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<h2 id="登录实例">登录实例</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh -i ~/.ssh/sshkey.pem  ubuntun@10.0.2.111
</span></span></code></pre></div><p>其中<code>~/.ssh/sshkey.pem</code>是我们下载的私钥文件，<code>ubuntun</code>是实例的用户名，<code>10.0.2.111</code>是实例的 IP 地址。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Devstack 部署 OpenStack</title>
      <link>https://lifeislife.cn/posts/devstack%E9%83%A8%E7%BD%B2openstack/</link>
      <pubDate>Fri, 09 Jun 2023 21:38:34 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/devstack%E9%83%A8%E7%BD%B2openstack/</guid>
      <description>&lt;h1 id=&#34;devstack-部署-openstack&#34;&gt;Devstack 部署 OpenStack&lt;/h1&gt;
&lt;p&gt;试验发现在 Host 为 Ubuntu20.04 和 22.04 上无法顺利安装 VirtualBox，请在 Ubuntu18.04 上安装 VirtualBox。虚拟机镜像版本为 Ubuntu20.04，以下步骤可以稳定复现，OpenStack master（c424a7a299e37004d318107648bb18e157344985）版本。&lt;/p&gt;
&lt;p&gt;总而言之，在 18.04 版本上安装 VirtualBox，在 20.04 版本上安装 OpenStack。&lt;/p&gt;
&lt;p&gt;因为安装 OpenStack 容易破话系统包依赖，如果为了学习建议在虚拟机中安装。&lt;/p&gt;
&lt;p&gt;安装过程中需要下载镜像，请确认机器可以访问外网。&lt;/p&gt;
&lt;h2 id=&#34;安装-virtualbox&#34;&gt;安装 VirtualBox&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install virtualbox virtualbox-ext-pack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;确认-virtualbox-配置&#34;&gt;确认 VirtualBox 配置&lt;/h2&gt;
&lt;p&gt;请确认 VirtualBox 配置如下，VirtualBox 默认配置硬盘为 10G，远远不够用，为了避免后续的麻烦，请确认如下配置：&lt;/p&gt;
&lt;p&gt;磁盘大于 100G&lt;/p&gt;
&lt;p&gt;内存大于 16G&lt;/p&gt;
&lt;p&gt;CPU 大于 4 个&lt;/p&gt;
&lt;h2 id=&#34;下载镜像并安装&#34;&gt;下载镜像并安装&lt;/h2&gt;
&lt;p&gt;镜像可以去&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/&#34;&gt;清华大学开源软件镜像站 | Tsinghua Open Source Mirror&lt;/a&gt;下载。&lt;/p&gt;
&lt;h2 id=&#34;更新源&#34;&gt;更新源&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apt/sources.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restrcdicted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restrcd &amp;amp;&amp;amp; mkdir .pip &amp;amp;&amp;amp; cd .pipicted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;EOF&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;备用源-以备不时之需&#34;&gt;备用源 (以备不时之需)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apt/sources.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restrcdicted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restrcd &amp;amp;&amp;amp; mkdir .pip &amp;amp;&amp;amp; cd .pipicted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;EOF&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apt/sources.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;EOF&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/apt/sources.list
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;EOF&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装基础包&#34;&gt;安装基础包&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install aptitude
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;aptitude 用于解决包依赖冲突。&lt;/p&gt;
&lt;h2 id=&#34;添加用户&#34;&gt;添加用户&lt;/h2&gt;
&lt;p&gt;添加 stack 用户&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo useradd -s /bin/bash -d /opt/stack -m stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;授予 sudo 权限&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;stack ALL=(ALL) NOPASSWD: ALL&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/sudoers.d/stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;切换到 stack 用户&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo su -  stack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;pip-配置&#34;&gt;PIP 配置&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd &amp;amp;&amp;amp; mkdir -p  .pip &amp;amp;&amp;amp; cd .pip &amp;amp;&amp;amp; bash -c &amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; ~/.pip/pip.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[global]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timeout = 6000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index-url = http://mirrors.aliyun.com/pypi/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;trusted-host = mirrors.aliyun.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;仓库下载&#34;&gt;仓库下载&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/openstack/devstack --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;配置-localconf&#34;&gt;配置 local.conf&lt;/h3&gt;
&lt;p&gt;只需要修改 HOST_IP，其他的可以不用修改，HOST_IP 为本机 IP 地址，可以使用 ifconfig 查看。如果是虚拟机就是虚拟机的 IP，virtualbox 创建的虚拟机默认为 10.0.2.15。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; devstack &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; touch local.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;lt;&amp;lt; EOF &amp;gt; /opt/stack/devstack/local.conf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;[[local|localrc]]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;HOST_IP=10.0.2.15
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;GIT_BASE=http://git.trystack.cn
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;ADMIN_PASSWORD=user
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;DATABASE_PASSWORD=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ADMIN_PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;RABBIT_PASSWORD=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ADMIN_PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;SERVICE_PASSWORD=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ADMIN_PASSWORD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;EOF&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FORCE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes ./stack.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;bug-解决&#34;&gt;BUG 解决&lt;/h1&gt;
&lt;h2 id=&#34;systemd-包依赖冲突&#34;&gt;systemd 包依赖冲突&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo aptitude install systemd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;选择N
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;再选择Y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;modulenotfounderror-no-module-named-distutilscmd&#34;&gt;ModuleNotFoundError: No module named &amp;lsquo;distutils.cmd&amp;rsquo;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; sudo apt-get install python3.10-distutils
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; # 根据自己的 Python 版本决定，可以 python3.7-distutils python3.8-distutils   ....都试一遍
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;apparmor-invalid-capability-bpf&#34;&gt;apparmor invalid capability bpf&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install apparmor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;no-tenant-network-is-available-for-allocation&#34;&gt;No tenant network is available for allocation&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/neutron/plugins/ml2/ml2_conf.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ml2&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;type_drivers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; flat,vlan,vxlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;tenant_network_types&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; vxlan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ml2_type_vxlan&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;vni_ranges&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 1:1000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;unixvarrunopenvswitchdbsock-database-connection-failed-connection-refused&#34;&gt;unix:/var/run/openvswitch/db.sock: database connection failed (Connection refused)&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;  /opt/stack/devstack/lib/neutron_plugin 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vi ovn_agent 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;116G  跳转到116行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OVS_RUNDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OVS_PREFIX&lt;/span&gt;/var/run/openvswitch &lt;span class=&#34;nv&#34;&gt;修改为OVS_RUNDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OVS_PREFIX&lt;/span&gt;/var/run/ovn 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -rf /var/run/ovn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;virtualbox-启动报错--failed-to-send-host-log-message&#34;&gt;VirtualBox 启动报错 : Failed to send host log message&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Ctrl+F2进入另一个终端
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;输入：startx进入桌面
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;attributeerror-module-collections-has-no-attribute-mutablemapping&#34;&gt;AttributeError: module ‘collections‘ has no attribute ‘MutableMapping‘&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collections.MutableMapping
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collections.abc.MutableMapping
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;modulenotfounderror-no-module-named-distutilscore&#34;&gt;ModuleNotFoundError: No module named &amp;lsquo;distutils.core&amp;rsquo;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install python3-pip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;error-cannot-uninstall-simplejson-it-is-a-distutils-installed-project-and-thus-we-cannot&#34;&gt;ERROR: Cannot uninstall &amp;lsquo;simplejson&amp;rsquo;. It is a distutils installed project and thus we cannot&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pip install --ignore-installed wrapt enum34 simplejson netaddr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;server-certificate-verification-failed-cafile-none-crlfile-none&#34;&gt;server certificate verification failed. CAfile: none CRLfile: none&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global http.sslverify &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global https.sslverify &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ubuntu登录页面验证出错&#34;&gt;Ubuntu:登录页面验证出错&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo loginctl unlock-sessions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ubuntu重装桌面&#34;&gt;Ubuntu:重装桌面&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install ubuntu-desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ubuntu-登录界面-authentication-error&#34;&gt;Ubuntu 登录界面 Authentication Error&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo loginctl unlock-sessions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;fs.inotify.max_user_watches=524288&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ubuntu-无法进入桌面系统但是可以-ssh-链接&#34;&gt;Ubuntu 无法进入桌面系统，但是可以 SSH 链接&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Bash&#34; data-lang=&#34;Bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -rf /var/lib/apt/lists/*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get clean
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install --reinstall appstream
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;gsettings-desktop-schemas--破坏mutter--3314-但是-3284-0ubuntu18042-正要被安装解决方案&#34;&gt;gsettings-desktop-schemas : 破坏：mutter (＜ 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安装解决方案&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-Java&#34; data-lang=&#34;Java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsettings&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;desktop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;schemas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;essential&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h1 id="devstack-部署-openstack">Devstack 部署 OpenStack</h1>
<p>试验发现在 Host 为 Ubuntu20.04 和 22.04 上无法顺利安装 VirtualBox，请在 Ubuntu18.04 上安装 VirtualBox。虚拟机镜像版本为 Ubuntu20.04，以下步骤可以稳定复现，OpenStack master（c424a7a299e37004d318107648bb18e157344985）版本。</p>
<p>总而言之，在 18.04 版本上安装 VirtualBox，在 20.04 版本上安装 OpenStack。</p>
<p>因为安装 OpenStack 容易破话系统包依赖，如果为了学习建议在虚拟机中安装。</p>
<p>安装过程中需要下载镜像，请确认机器可以访问外网。</p>
<h2 id="安装-virtualbox">安装 VirtualBox</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo apt update
</span></span><span class="line"><span class="cl">sudo apt install virtualbox virtualbox-ext-pack
</span></span></code></pre></div><h2 id="确认-virtualbox-配置">确认 VirtualBox 配置</h2>
<p>请确认 VirtualBox 配置如下，VirtualBox 默认配置硬盘为 10G，远远不够用，为了避免后续的麻烦，请确认如下配置：</p>
<p>磁盘大于 100G</p>
<p>内存大于 16G</p>
<p>CPU 大于 4 个</p>
<h2 id="下载镜像并安装">下载镜像并安装</h2>
<p>镜像可以去<a href="https://mirrors.tuna.tsinghua.edu.cn/">清华大学开源软件镜像站 | Tsinghua Open Source Mirror</a>下载。</p>
<h2 id="更新源">更新源</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk <span class="o">&amp;&amp;</span> sudo bash -c <span class="s2">&#34;cat &lt;&lt; EOF &gt; /etc/apt/sources.list
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restrcdicted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restrcd &amp;&amp; mkdir .pip &amp;&amp; cd .pipicted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">EOF&#34;</span>
</span></span></code></pre></div><h3 id="备用源-以备不时之需">备用源 (以备不时之需)</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk <span class="o">&amp;&amp;</span> sudo bash -c <span class="s2">&#34;cat &lt;&lt; EOF &gt; /etc/apt/sources.list
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restrcdicted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restrcd &amp;&amp; mkdir .pip &amp;&amp; cd .pipicted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">EOF&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk <span class="o">&amp;&amp;</span> sudo bash -c <span class="s2">&#34;cat &lt;&lt; EOF &gt; /etc/apt/sources.list
</span></span></span><span class="line"><span class="cl"><span class="s2">deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src https://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">deb https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src https://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">deb https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src https://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">EOF&#34;</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk <span class="o">&amp;&amp;</span> sudo bash -c <span class="s2">&#34;cat &lt;&lt; EOF &gt; /etc/apt/sources.list
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
</span></span></span><span class="line"><span class="cl"><span class="s2">EOF&#34;</span>
</span></span></code></pre></div><h2 id="安装基础包">安装基础包</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo apt update
</span></span><span class="line"><span class="cl">sudo apt install git
</span></span><span class="line"><span class="cl">sudo apt install aptitude
</span></span></code></pre></div><p>aptitude 用于解决包依赖冲突。</p>
<h2 id="添加用户">添加用户</h2>
<p>添加 stack 用户</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo useradd -s /bin/bash -d /opt/stack -m stack
</span></span></code></pre></div><p>授予 sudo 权限</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;stack ALL=(ALL) NOPASSWD: ALL&#34;</span> <span class="p">|</span> sudo tee /etc/sudoers.d/stack
</span></span></code></pre></div><p>切换到 stack 用户</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo su -  stack
</span></span></code></pre></div><h2 id="pip-配置">PIP 配置</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">cd &amp;&amp; mkdir -p  .pip &amp;&amp; cd .pip &amp;&amp; bash -c &#34;cat &lt;&lt; EOF &gt; ~/.pip/pip.conf
</span></span><span class="line"><span class="cl">[global]
</span></span><span class="line"><span class="cl">timeout = 6000
</span></span><span class="line"><span class="cl">index-url = http://mirrors.aliyun.com/pypi/simple/
</span></span><span class="line"><span class="cl">trusted-host = mirrors.aliyun.com
</span></span><span class="line"><span class="cl">EOF&#34;
</span></span></code></pre></div><h2 id="仓库下载">仓库下载</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">git clone https://github.com/openstack/devstack --depth <span class="m">1</span>
</span></span></code></pre></div><h3 id="配置-localconf">配置 local.conf</h3>
<p>只需要修改 HOST_IP，其他的可以不用修改，HOST_IP 为本机 IP 地址，可以使用 ifconfig 查看。如果是虚拟机就是虚拟机的 IP，virtualbox 创建的虚拟机默认为 10.0.2.15。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl"><span class="nb">cd</span> devstack <span class="o">&amp;&amp;</span> touch local.conf <span class="o">&amp;&amp;</span> bash -c <span class="s2">&#34;cat &lt;&lt; EOF &gt; /opt/stack/devstack/local.conf
</span></span></span><span class="line"><span class="cl"><span class="s2">[[local|localrc]]
</span></span></span><span class="line"><span class="cl"><span class="s2">HOST_IP=10.0.2.15
</span></span></span><span class="line"><span class="cl"><span class="s2">GIT_BASE=http://git.trystack.cn
</span></span></span><span class="line"><span class="cl"><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">ADMIN_PASSWORD=user
</span></span></span><span class="line"><span class="cl"><span class="s2">DATABASE_PASSWORD=</span><span class="nv">$ADMIN_PASSWORD</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">RABBIT_PASSWORD=</span><span class="nv">$ADMIN_PASSWORD</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">SERVICE_PASSWORD=</span><span class="nv">$ADMIN_PASSWORD</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">EOF&#34;</span>
</span></span></code></pre></div><h2 id="安装">安装</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl"><span class="nv">FORCE</span><span class="o">=</span>yes ./stack.sh
</span></span></code></pre></div><h1 id="bug-解决">BUG 解决</h1>
<h2 id="systemd-包依赖冲突">systemd 包依赖冲突</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo aptitude install systemd
</span></span><span class="line"><span class="cl">选择N
</span></span><span class="line"><span class="cl">再选择Y
</span></span></code></pre></div><h2 id="modulenotfounderror-no-module-named-distutilscmd">ModuleNotFoundError: No module named &lsquo;distutils.cmd&rsquo;</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"> sudo apt-get install python3.10-distutils
</span></span><span class="line"><span class="cl"> # 根据自己的 Python 版本决定，可以 python3.7-distutils python3.8-distutils   ....都试一遍
</span></span></code></pre></div><h2 id="apparmor-invalid-capability-bpf">apparmor invalid capability bpf</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo apt install apparmor
</span></span></code></pre></div><h2 id="no-tenant-network-is-available-for-allocation">No tenant network is available for allocation</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">vim /etc/neutron/plugins/ml2/ml2_conf.ini
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>ml2<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="nv">type_drivers</span> <span class="o">=</span> flat,vlan,vxlan
</span></span><span class="line"><span class="cl"><span class="nv">tenant_network_types</span> <span class="o">=</span> vxlan
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">[</span>ml2_type_vxlan<span class="o">]</span>
</span></span><span class="line"><span class="cl"><span class="nv">vni_ranges</span> <span class="o">=</span> 1:1000
</span></span></code></pre></div><h2 id="unixvarrunopenvswitchdbsock-database-connection-failed-connection-refused">unix:/var/run/openvswitch/db.sock: database connection failed (Connection refused)</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl"><span class="nb">cd</span>  /opt/stack/devstack/lib/neutron_plugin 
</span></span><span class="line"><span class="cl">vi ovn_agent 
</span></span><span class="line"><span class="cl">116G  跳转到116行
</span></span><span class="line"><span class="cl"><span class="nv">OVS_RUNDIR</span><span class="o">=</span><span class="nv">$OVS_PREFIX</span>/var/run/openvswitch <span class="nv">修改为OVS_RUNDIR</span><span class="o">=</span><span class="nv">$OVS_PREFIX</span>/var/run/ovn 
</span></span><span class="line"><span class="cl">sudo rm -rf /var/run/ovn
</span></span></code></pre></div><h2 id="virtualbox-启动报错--failed-to-send-host-log-message">VirtualBox 启动报错 : Failed to send host log message</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">Ctrl+F2进入另一个终端
</span></span><span class="line"><span class="cl">输入：startx进入桌面
</span></span></code></pre></div><h2 id="attributeerror-module-collections-has-no-attribute-mutablemapping">AttributeError: module ‘collections‘ has no attribute ‘MutableMapping‘</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">collections.MutableMapping
</span></span><span class="line"><span class="cl">collections.abc.MutableMapping
</span></span></code></pre></div><h2 id="modulenotfounderror-no-module-named-distutilscore">ModuleNotFoundError: No module named &lsquo;distutils.core&rsquo;</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">sudo apt install python3-pip
</span></span></code></pre></div><h2 id="error-cannot-uninstall-simplejson-it-is-a-distutils-installed-project-and-thus-we-cannot">ERROR: Cannot uninstall &lsquo;simplejson&rsquo;. It is a distutils installed project and thus we cannot</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">sudo pip install --ignore-installed wrapt enum34 simplejson netaddr
</span></span></code></pre></div><h2 id="server-certificate-verification-failed-cafile-none-crlfile-none">server certificate verification failed. CAfile: none CRLfile: none</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">git config --global http.sslverify <span class="nb">false</span>
</span></span><span class="line"><span class="cl">git config --global https.sslverify <span class="nb">false</span>
</span></span></code></pre></div><h2 id="ubuntu登录页面验证出错">Ubuntu:登录页面验证出错</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo loginctl unlock-sessions
</span></span></code></pre></div><h2 id="ubuntu重装桌面">Ubuntu:重装桌面</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo apt install ubuntu-desktop
</span></span></code></pre></div><h2 id="ubuntu-登录界面-authentication-error">Ubuntu 登录界面 Authentication Error</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo loginctl unlock-sessions
</span></span><span class="line"><span class="cl">sudo <span class="nb">echo</span> <span class="s2">&#34;fs.inotify.max_user_watches=524288&#34;</span> &gt;&gt; /etc/sysctl.conf
</span></span></code></pre></div><h2 id="ubuntu-无法进入桌面系统但是可以-ssh-链接">Ubuntu 无法进入桌面系统，但是可以 SSH 链接</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">sudo rm -rf /var/lib/apt/lists/*
</span></span><span class="line"><span class="cl">sudo apt-get clean
</span></span><span class="line"><span class="cl">sudo apt-get update
</span></span><span class="line"><span class="cl">sudo apt-get install --reinstall appstream
</span></span></code></pre></div><h2 id="gsettings-desktop-schemas--破坏mutter--3314-但是-3284-0ubuntu18042-正要被安装解决方案">gsettings-desktop-schemas : 破坏：mutter (＜ 3.31.4) 但是 3.28.4-0ubuntu18.04.2 正要被安装解决方案</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Java" data-lang="Java"><span class="line"><span class="cl"><span class="n">sudo</span><span class="w"> </span><span class="n">apt</span><span class="w"> </span><span class="n">install</span><span class="w"> </span><span class="n">gsettings</span><span class="o">-</span><span class="n">desktop</span><span class="o">-</span><span class="n">schemas</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="n">sudo</span><span class="w"> </span><span class="n">apt</span><span class="o">-</span><span class="n">get</span><span class="w"> </span><span class="n">install</span><span class="w"> </span><span class="n">build</span><span class="o">-</span><span class="n">essential</span><span class="w">
</span></span></span></code></pre></div>]]></content:encoded>
    </item>
  </channel>
</rss>
