GitLab 绑定 GCP 使用 Auto DevOps(可领取GCP $200.00 赠金)

Auto DevOps provides pre-defined CI/CD configuration which allows you to automatically detect, build, test, deploy, and monitor your applications. Leveraging CI/CD best practices and tools, Auto DevOps aims to simplify the setup and execution of a mature & modern software development lifecycle.

GitLab 的 Auto DevOps 是一个亮点,博主对于其特性还不够了解,在此不多谈。本文仅介绍如何为自建的 GitLab 绑定 Google Kubernets Engine (GKE)。

GitLab 配置 Kubernets 节点的方式用两种,一种是绑定 GKE,一种是使用已存在的 Cluster ,但实测第二种貌似是用于 AWS ,这一点博主暂且不提。接着说本文重点 GKE。绑定 GKE需要配置 Google OAuth2 OmniAuth Provider。

领取GCP $200.00 赠金(可用3个月)

在根据上文 《KVM 虚拟机安装 GitLab EE》 配置完毕 GieLab,在 GitLab 绑定 Kubernets 节点的界面出现这样一段描述:

[tip type=”info” title=”Did you know?”] Every new Google Cloud Platform (GCP) account receives $300 in credit upon sign up. In partnership with Google, GitLab is able to offer an additional $200 for both new and existing GCP accounts to get started with GitLab’s Google Kubernetes Engine . [/tip]

大概意思是说,谷歌为每一个注册 GCP 的新账户提供 $300 的赠金。作为 GCP 的伙伴,GitLab 也可以为每一位新的并已有 GCP 账户的用户提供 $200 的赠金用于整合 GKE 和 GitLab 的整合。于是抱着试一试的心态,点击按钮填写表单,没想到没过多久,就收到了邮件:

邮件告诉我,GCP 代表他们的合作伙伴为我提供了 $200 的信用额度,我可以使用这一额度构建自己的应用程序。兑换的信用代码需要在 30 天内兑换并在兑换后三个月内到期。

进入兑换,成功兑换。

如果你是进来看领取赠金的方法,我在这里简单总结一下,但是在此我想说一下:云计算服务可以做的事情很多,如果仅仅是用于 VPS 就颇有一种大炮打蚊子的场面。GCP 等大型云服务提供商提供的稳定、灵活高可用性的云计算服务更加令人兴奋。

大致方法如下:

  1. 自建 GitLab (Docker,War包等方式)
  2. 使用root账户进入管理后台,进入添加 Kubernets 节点界面
  3. 检查是否有获取 GCP 赠金的入口

为 GitLab 配置 GCP 凭据实现二者对接

  1. 首先进入 GCP 云资源管理界面: cloud resource manager

  2. 创建项目,可使用 GitLab 作为项目名称,项目ID可以使用系统自动生成的,也可自己指定但必须唯一

  3. 进入 API 控制台

  4. 在左上方切换到刚刚新建的项目

  5. 在左侧选择 OAuth 同意屏幕 并完整填写信息

  6. 从左侧 sidebar 进入 凭据,创建凭据,选择 OAuth 客户端 ID ,并完整填写信息

  • 应用类型选择 Web 应用程序
  • 名称可使用自动生成的或自定义
  • 已获授权的 JavaScript 来源 可填入您的 GitLab域名 https://gitlab.example.com/
  • 已获授权的重定向 URI 需包含下列两个地址
    • https://gitlab.example.com/users/auth/google_oauth2/callback
    • https://gitlab.example.com/-/google_api/auth/callback
  1. 完成以上步骤即可得到 客户端 ID客户端密钥, 信息后面还能看到,后面配置需要用到。

  2. 为项目授权以下 APi 权限

  • Google Kubernetes Engine API
  • Cloud Resource Manager API
  • Cloud Billing API

通过这个方法授权:

  • 进入 Google API Console
  • 点击 启用APi和服务
  • 在搜索框内依次检索以上三个 API,进入点击 启用
  • 等待数分钟完成
  1. 修改 GitLab 配置
# For Omnibus GitLab:
$ sudo editor /etc/gitlab/gitlab.rb

# For installations from source:
$ cd /home/git/gitlab
$ sudo -u git -H editor config/gitlab.yml

找到以下内容进行修改:

# For Omnibus GitLab:
gitlab_rails['omniauth_providers'] = [
  {
    "name" => "google_oauth2",
    "app_id" => "YOUR_APP_ID",
    "app_secret" => "YOUR_APP_SECRET",
    "args" => { "access_type" => "offline", "approval_prompt" => '' }
  }
]

# For installations from source:
- { name: 'google_oauth2', app_id: 'YOUR_APP_ID',
  app_secret: 'YOUR_APP_SECRET',
  args: { access_type: 'offline', approval_prompt: '' } }

修改 YOUR_APP_IDclient ID为上面获取到的 GCP 密钥。

  1. 完成

参考文献

综述 DevOps

DevOps 常见于各大云计算提供商。DevOpe被用于打破开发者和运维者之间的壁垒,目的是缩短软件开发周期并提供高质量的持续集成。

[tip type=”info” title=”DevOps”]

DevOps is a set of practices that combines software development (Dev) and information-technology operations (Ops) which aims to shorten the systems development life cycle and provide continuous delivery with high software quality. (WikiPedia)

[/tip]

这样的说法很抽象,来看看各个服务商都是怎么描述自家的 DevOps 的吧。

  • CODING DevOps 包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。 (Tencent Cloud)
  • DevCloud是集华为研发实践、前沿研发理念、先进研发工具为一体的研发云平台; 面向开发者提供研发工具服务,让软件开发简单高效。(HuaWei Cloud)
  • 利用 DevOps 缩短版本发布间隔时间,提高可靠性,在竞争中保持领先地位; DevOps 是一种日益常见的软件交付方法,开发和运营团队以速度、质量和控制协作构建、测试、部署和监控应用程序。 DevOps 与任何类型的软件项目都相关,无论架构、平台或用途如何。常见用例包括:云原生和移动应用、应用集成以及现代化和多云管理。 成功的 DevOps 实施通常依赖于一组集成的解决方案或“工具链”,用于消除手动步骤,减少错误,并超越小型孤立团队实现扩展。 (IBM DevOps)
  • 无论是才刚开始执行 DevOps 实现,还是期望与现有工具链和流程集成,都可以采用 Azure DevOps 技术更加快速、安全地构建端到端的持续交付管道。减少工具集维护耗费的时间,更加专注于客户价值。通过 DevOps 技术生成、发布、测试并监视云和移动应用程序非常简单可靠,可让用户使用任意工具链持续实现创新。(Azure DevOps)
  • DevOps 是一项组织和文化运动,旨在加快软件交付速度,提高服务可靠性,并在软件利益相关方之间建立共享所有权。了解如何提高软件交付的速度、稳定性、可用性和安全性。(Google Cloud)
  • AWS 可以提供一套灵活的服务,让各家公司利用 AWS 和 DevOps 实践经验来更加快速、可靠地构建和交付产品。这些服务可以简化基础设施的预置和管理、应用程序代码的部署、软件发布流程的自动化以及应用程序和基础设施性能的监控。DevOps 集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。这种速度使组织能够更好地服务其客户,并在市场上更高效地参与竞争。(AWS DevOps)

从上面多家云服务商的描述大概可以窥探 DevOps 一二了吧。目前来说,DevOps更多的还停留在理念层面,它使用容器、Kubernetes 和微服务等服务,多提供代码托管、工作流、软件测试、持续交付等功能。越是大型的企业,提供的服务更全面、高级、层次更高。反观国内的提供商还是有一些差距的。

根据文章 《DevOps漫谈之一:DevOps、CI、CD都是什么鬼?》的说法,DevOps是 DevelopmentOperations 的组合,是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。

根据另一篇文章《DevOps简介》的说法:

DevOps的一个巨大好处就是可以高效交付,这也正好是它的初衷。Puppet和DevOps Research and Assessment (DORA) 主办了2016年DevOps调查报告,根据全球4600位各IT公司的技术工作者的提交数据统计,得出高效公司平均每年可以完成1460次部署。

与低效组织相比,高效组织的部署频繁200倍,产品投入使用速度快2555倍,服务恢复速度快24倍。在工作内容的时间分配上,低效者要多花22%的时间用在为规划好或者重复工作上,而高效者却可以多花29%的时间用在新的工作上。所以这里的高效不仅仅指公司产出的效率提高,还指员工的工作质量得到提升。

DevOps另外一个好处就是会改善公司组织文化、提高员工的参与感。员工们变得更高效,也更有满足和成就感;调查显示高效员工的雇员净推荐值(eNPS:employee Net Promoter Score)更高,即对公司更加认同。

综上,DevOps 致力于促进开发人员和运维人员的沟通,及时递交需求、完成软件测试、反馈问题、自动化交付。可以免去很多机械化的操作。这么说,作者认为这和 工作流 的理念也有一些像。

工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的就是工作流。(MBA 智库)

将一切可流程化的工作流程化,搭建一个高灵活性的工作流平台,将这一平台应用于各个领域,这已成为大势所趋。微软的 Folw,跨平台的 IFTTT,苹果的 捷径,开源的 N8n 等等工具都在致力于将机械化的工作流水线化,从而提高工作效率。Gis 专业的博主最近也在想,能不能将地信的种种应用做成模版,从而将分析过程简化,降低 Gis 的使用门槛,让更多的人可以使用到。

使用广泛的 git hosting 平台 gitlab 也因其强大的 CI/CD 功能而闻名,实际上在使用 GitLab 时是需要绑定 Google Cloud Platform(GCP) 的 Google Kubernetes Engine 服务进行使用的。其实还有开源可用的 Jenkins 可以作为 CI/CD 的有力工具。

工具众多,开源可用,工作流和持续集成有着众多类似之处,但究竟会怎样还是要实践后才知道。

参考文献

Linux 使用 DNSMasq 自建 DNS 服务器

DNS(Domain Name System) 是一个为计算机、服务器或其他任何需要接入互联网或私有网络提供分级域名分发系统(hierarchical and decentralized naming system)。

在内网中又一台服务器提供服务,为了使用使其可以在公共网络中访问到需要为它分配 ip 或者使用端口转发、内网穿透等,但绑定域名后域名解析到公网ip,如果在内网访问的话就写多此一举。因此在内网自建一台 DNS 服务器,使其优先级高于公网域名解析服务器,进而实现内网访问解析为内网 ip 且不影响外网访问的目的。

DNSMasq 主要用来解决内网 DNS 域名缓存、DHCP、网络启动和路由通告功能,本文目的是将 DNSMasq 作为内网 DNS 使用。

  1. 安装 DNSMasq
# Ubuntu/Debian
$ sudo apt update
$ sudo apt install -y dnsmasq

# Centos
$ yum install dnsmasq -y 
$ service dnsmasq start
  1. 修改配置

$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
$ sudo vim /etc/dnsmasq.conf
....
resolv-file=/etc/resolv.conf
strict-order
listen-address=<host-ip>
addn-hosts=/etc/hosts.dnsmasq

修改内容解释:

  • resolv-file:从文件读取 DNSMasq 上游的 DNS 服务器配置。
  • strict-order:resolv-file 文件中如果指定了多个 DNS 服务器,严格安装 DNS 服务器的先后顺序查询域名。
  • listen-address:监听地址,如果你不想所有用户都使用你的DNS服务,可以在listen-address后面加上你指定的IP地址即可。
  • addn-hosts:从文件读取本地 DNS 域名和 IP 的对应关系,格式为 。其实可以把 IP 和域名的对应关系写在 /etc/hosts 文件中,DNSMasq 默认从那里读取,但如果要支持一个域名对应多个 IP,就必须使用 addn-hosts 选项了。

/etc/hosts.dnsmasq 文件内容如下:

$ cat /etc/hosts.dnsmasq
10.0.0.1 blackpiglet.com
10.0.0.2 blackpiglet.com
10.0.0.3 blackpiglet.com

修改完成后重启 DNSMasq

$ sudo systemctl restart dnsmasq.service
  1. 配置Dnsmasq上游DNS服务器

DNSMasq 是从 /etc/resolv.conf 文件中读取上游 DNS 服务器, 编辑 /etc/resolv.conf ,参考如下:

nameserver 223.5.5.5
nameserver 223.4.4.4
  1. 启动Dnsmasq并加入启动项(Centos)
chkconfig dnsmasq on
/etc/init.d/dnsmasq restart
  1. 使用

在需要内网解析的服务器上修改网络设置中的DNS服务器即可。

参考文献

KVM虚拟机安装 GitLab EE

GitLab 是一个基于网页的软件开发生命周期管理工具,提供了 git 代码仓库、知识库、问题追踪、CI/CD 流水线功能,使用开源许可证,由 GitLab 公司开发(来自 WikiPedia)。

自建 GitLab 服务器基于以下原因:

  1. GitHub 到国内的访问速度实在堪忧
  2. 随着某种关系的变化发展,作者并不指望这种状况有什么改善
  3. Git 仓库速度缓慢会拖慢开发效率
  4. GitHub Pages 的访问速度慢,托管在此的网页对于国内用户实在太不友好
  5. GitLab 提供的 CI/CD 流水线功能比较完善
  6. GitLab 的文档很全面,英文说明还不错,值得探索
  7. 借此机会提高英文

自建方法还是基于 KVM 虚拟化一台 Ubuntu 虚拟机,并由这台虚拟机提供服务,外网由宿主机反向代理到内网实现外网访问。本文记录基于此上描述的环境及日后遇到的解决方案,本文带有一个持续更新区。

虚拟化

  1. 创建虚拟磁盘

    qemu-img create -f qcow2 ubuntu_gitlab.qcow2 100G
  2. 新建虚拟机

    
    virt-install \
    --virt-type=kvm \
    --name=ubuntu_gitlab \
    --hvm \
    --vcpus=4 \
    --memory=6144 \
    --cdrom=/srv/kvm/iso/ubuntu-18.04.3-live-server-amd64.iso \
    --disk path=/srv/kvm/ubuntu_gitlab.qcow2,size=100,format=qcow2 \
    --network network=default \
    --graphics vnc,password=tianlun666,listen=::,port=5914 \
    --autostart \
    --force

3. 安装

在安装的过程中,为虚拟机配置网络如下:

 - statics ip : `192.168.122.4`
 - GatWay: `192.168.122.1`
 - name server: `192.168.122.1`
 - Subnet: `192.168.122.0/24`

## 安装 GitLab

GitLab 官方提供的[安装说明](https://about.gitlab.com/install/)很全面,本文提取其中关键步骤,具体安装请以官网文档为准。

1. 安装并配置相关依赖

$ sudo apt-get update $ sudo apt-get install -y curl openssh-server ca-certificates


[tip type="info" title="安装Postfix (选装)"]
GitLab 支持 Postfix, SMTP 等方式实现邮件通知,使用SMTP请跳过此步,如果需要安装Postfix邮件请执行以下的命令:

sudo apt-get install -y postfix

安装过程中可能会出现一个全屏显示窗口,此时选择'Internet Site'并回车,使用你服务器的外部 DNS 作为'mail name'并回车,不出意外的话安装会继续进行。
[/tip]

2. 添加 GitLab 软件源

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash


3. 运行 GitLab 安装

将代码中的网址替换为您为 GitLab 准备的地址,GitLab 会使用 Let's Encrypt 验证您的域名并自动为其配置 SSL。

sudo EXTERNAL_URL=”https://gitlab.example.com” apt-get install gitlab-ee


4. 设置默认 root 密码。

使用浏览器进入您上一步设置的地址,使用 `root` 账户登录,系统会提示您为其设置密码。

## 案例汇总(持续更新区)

### 为 GitLab 配置 SMTP 邮箱

1. 依次修改配置文件

vim /etc/gitlab/gitlab.rb

依次修改

gitlab_rails[‘smtp_enable’] = true gitlab_rails[‘smtp_address’] = “smtp.mxhichina.com” gitlab_rails[‘smtp_port’] = 25 gitlab_rails[‘smtp_user_name’] = “gitlab@yinnote.com” gitlab_rails[‘smtp_password’] = “xxxxxx” gitlab_rails[‘smtp_domain’] = “yinnote.com” gitlab_rails[‘smtp_authentication’] = “login” gitlab_rails[‘smtp_enable_starttls_auto’] = true gitlab_rails[‘smtp_tls’] = false

gitlab_rails[‘gitlab_email_from’] = “gitlab@yinnote.com” user[“git_user_email”] = “gitlab@yinnote.com”


2. 生效配置并重启 GitLab

$ gitlab-ctl reconfigure $ gitlab-ctl restart


3. 监听日志打印

如果出现问题,可以使用该命令在控制台监听日志。

$ gitlab-ctl tail


4. 可能用到的 VIM 命令

整页翻页 ctrl-f ctrl-b

f就是forword b就是backward

翻半页

ctrl-d ctlr-u d=down u=up

滚一行

ctrl-e ctrl-y

zz 让光标所在的行居屏幕中央 zt 让光标所在的行居屏幕最上一行 t=top zb 让光标所在的行居屏幕最下一行 b=bottom

查找

/string

向前(Forward)查找字符串string

按下回车后,光标就能跳到正确的地方


### 手动刷新 Let’s Encrypt 证书

sudo gitlab-ctl reconfigure sudo gitlab-ctl renew-le-certs



## 参考文献

 - [GitLab Installation](https://about.gitlab.com/install/)
 - [WikiPedia/GitLab](https://en.wikipedia.org/wiki/GitLab)
 - [VIM中的翻页命令](https://blog.csdn.net/nyist327/article/details/48625385)
 - [VIM 查找文本](https://blog.csdn.net/hitustc/article/details/5585101)
 - [GitLab邮件配置](https://www.jianshu.com/p/b91d2e676cba)
 - [Git:gitlab修改域名配置](https://blog.csdn.net/qq_36937234/article/details/89381857)
 - [SSL Configuration](https://docs.gitlab.com/omnibus/settings/ssl.html)
 - [使用SSL证书保护GitLab服务器的方法](https://ywnz.com/linuxyffq/3961.html)

自建网盘之 NextCloud 终极记录

自建过许多网盘,试过 可道云、Seafile、FileRun、Nextcloud,但Nextcloud的如下特性吸引了我:

  • 完整、好用的客户端,包括 windows、mac、android、ios …
  • 强大的插件扩展,如 Talk, Contacts, notes, Maps …
  • 完整的第三方扩展,支持 Amazie S3, OneDrive, DropBox, Google Drive, Ftp, WebDav …

以上种种吸引了我进行了无数次的配置、尝试、探索。我在 Centos, Debian, Ubuntu, Docker, Cpanel Virtual Hosting 上都尝试过配置 Nextcloud , 但最终发现,还是官方首推的 sudo snap install nextcloud 方式是最稳定的,此外的自建环境 (Linux + Nginx + Php + MySQL) 总是会出各种各样的兼容性、异常报错,而这些异常报错会在一些莫名其妙、意想不到的地方出现让人在一个莫名其妙的地方掉坑。

以上种种,我决定在服务器上 KVM 虚拟出来一个 Ubuntu 系统专门配置 Nextcloud 服务。会有人说有必要吗?在一台 VPS 就可以配置 LNMG/LAMP + CLoud Drive + Docker + Kubernates + node.js 等等环境。但在我踩过无数的坑之后,发现一切兼容的,都难以发挥其自身最大的力量

话不多说,本文主要记录 Nextcloud 配置在 KVM 虚拟化出的 Ubuntu 系统上,并持续更新后续各种基于此环境的操作。

虚拟机环境

  1. 创建虚拟磁盘
qemu-img create -f qcow2 ubuntu_nextcloud.qcow2 100G
  1. 创建 KVM 虚拟机

    virt-install \
    --virt-type=kvm \
    --name=ubuntu_nextcloud \
    --hvm \
    --vcpus=4 \
    --memory=4096 \
    --cdrom=/srv/kvm/iso/ubuntu-18.04.3-live-server-amd64.iso \
    --disk path=/srv/kvm/ubuntu_nextcloud.qcow2,size=400,format=qcow2 \
    --network network=default \
    --graphics vnc,password=kvm,listen=::,port=5913 \
    --autostart \
    --force
  2. VNC 装系统

通过 VNC viewer 连入宿主机 5913 端口输入密码,安装操作系统。

C4791477-DEA4-4F81-A7D7-6DDDE62863B3.png

  1. 端口转发

在宿主机使用 Frp, Iptables, NAT…等方式按照需求将虚拟机 80 端口转发出来,当然也可以不转发,这样子可以在内网的机器上使用内网 ip 直接访问到将来配置的 Nextcloud.

安装 nextcloud

A snap is a zip file containing an application together with its dependencies, and a description of how it should safely be run on your system, especially the different ways it should talk to other software. Most importantly snaps are designed to be secure, sandboxed, containerized applications isolated from the underlying system and from other applications.

To install the Nextcloud Snap Package, run the following command in a terminal:

sudo snap install nextcloud

此前已经说明在这里使用 snap 一键安装 Nextcloud ,除此之外还有 Web installer , zip, 等方式,可以直接将 nextcloud 安装在 自建好的 lnmp 环境上,但这种方式在此不再说明。

注:英文部分摘自官网说明。

Nextcloud 维护 (持续更新区)

在使用过程中会需要各种莫名其妙的问题,因此在这里记录基于以上配置方法及环境下遇到的问题。

snap 常用命令


#查看snap版本信息
snap --version
#找出所有snap应用
snap find
#安装应用
snap install 包名
#重启应用
snap restart 应用名
#升级应用
snap refresh 应用名
#查看安装的应用
snap list
#卸载应用
snap remove 应用名

Nextcloud 资源位置

  • 数据资源位置:/var/snap/nextcloud/common/nextcloud/data
  • 配置资源位置:/var/snap/nextcloud/current/nextcloud/config/config.php

调整 PHP 内存限制的方法

$ sudo snap set nextcloud php.memory-limit=512M

# To set it to be unlimited
$ sudo snap set nextcloud php.memory-limit=-1

调整最大处理时间的方法

$ sudo snap set nextcloud nextcloud.cron-interval=10m

# disable the cronjob completely
$ sudo snap set nextcloud nextcloud.cron-interval=-1

添加可信域的方法

# 查看可信域
$ sudo nextcloud.occ config:system:get trusted_domains

# 添加可信域,请调整 1 和 example.com, 计数从 ‘0’ 开始
$ sudo nextcloud.occ config:system:set trusted_domains 1 --value=example.com

关闭维护模式的方法

sudo nextcloud.occ maintenance:mode --off

IOS 配置 Calendar / Contacts

  1. 打开设置 settings application -> Select Mail, Contacts, Calendars -> Select Add Account Select Add CalDAV/CardDAV account.

  2. 填入服务器、账号、密码

For server, type example.com/remote.php/dav/principals/users/USERNAME/

  1. 成功 Select Next.

上传文件限制

根据文章 snap安装nextcloud详细配置 的说法:snap nextcloud的项目地址在https://github.com/nextcloud/nextcloud-snap,目前snap安装的nextcloud还不能调整和配置包内的php和apache2,但官方已经配置好的apache2和PHP 单文件16Gb的上传限制(实际好像不限制大小),一般来说应该不需要更改。

自签名证书 ssl

I copyied the cert files in /var/snap/nextcloud/current/certs/custom/ and then

sudo nextcloud.enable-https custom -s cert.pem privkey.pem chain.pem

也许会成功,来源 :Using your own SSL certs in snap

参考文献

解决 MySQL 报错 “ Column count of mysql.user is wrong…”

新建 MySQL 账户报错:

Column count of mysql.user is wrong. Expected 45, found 43. Created with MySQL 5 

错误是由于你曾经升级过数据库,升级完后没有使用mysql_upgrade升级数据结构造成的。

解决办法:使用mysql_upgrade命令

$  mysql_upgrade -u root -p 
Enter password: 
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Upgrading the sys schema.
Checking databases.
pan.oc_accounts                                    OK
pan.oc_activity                                    OK
pan.oc_activity_mq                                 OK
pan.oc_addressbookchanges                          OK
pan.oc_addressbooks                                OK
pan.oc_appconfig                                   OK
pan.oc_authtoken                                   OK
pan.oc_bruteforce_attempts                         OK
pan.oc_calendar_invitations                        OK
pan.oc_calendar_reminders                          OK
pan.oc_calendar_resources                          OK
pan.oc_calendar_resources_md                       OK
pan.oc_calendar_rooms                              OK
pan.oc_calendar_rooms_md                           OK
pan.oc_calendarchanges                             OK
pan.oc_calendarobjects                             OK
pan.oc_calendarobjects_props                       OK
pan.oc_calendars                                   OK
pan.oc_calendarsubscriptions                       OK
pan.oc_cards                                       OK
pan.oc_cards_properties                            OK
pan.oc_collres_accesscache                         OK
pan.oc_collres_collections                         OK
pan.oc_collres_resources                           OK
pan.oc_comments                                    OK
pan.oc_comments_read_markers                       OK
pan.oc_credentials                                 OK
pan.oc_dav_cal_proxy                               OK
pan.oc_dav_shares                                  OK
pan.oc_directlink                                  OK
pan.oc_external_applicable                         OK
pan.oc_external_config                             OK
pan.oc_external_mounts                             OK
pan.oc_external_options                            OK
pan.oc_federated_reshares                          OK
pan.oc_file_locks                                  OK
pan.oc_filecache                                   OK
pan.oc_filecache_extended                          OK
pan.oc_files_trash                                 OK
pan.oc_flow_checks                                 OK
pan.oc_flow_operations                             OK
pan.oc_group_admin                                 OK
pan.oc_group_user                                  OK
pan.oc_groups                                      OK
pan.oc_jobs                                        OK
pan.oc_login_flow_v2                               OK
pan.oc_maps_address_geo                            OK
pan.oc_maps_apikeys                                OK
pan.oc_maps_device_points                          OK
pan.oc_maps_devices                                OK
pan.oc_maps_favorites                              OK
pan.oc_maps_photos                                 OK
pan.oc_maps_tracks                                 OK
pan.oc_migrations                                  OK
pan.oc_mimetypes                                   OK
pan.oc_mounts                                      OK
pan.oc_notes_meta                                  OK
pan.oc_notifications                               OK
pan.oc_notifications_pushtokens                    OK
pan.oc_oauth2_access_tokens                        OK
pan.oc_oauth2_clients                              OK
pan.oc_ocdownloader_adminsettings                  OK
pan.oc_ocdownloader_personalsettings               OK
pan.oc_ocdownloader_queue                          OK
pan.oc_phonetrack_devices                          OK
pan.oc_phonetrack_filtersb                         OK
pan.oc_phonetrack_geofences                        OK
pan.oc_phonetrack_points                           OK
pan.oc_phonetrack_proxims                          OK
pan.oc_phonetrack_pubshares                        OK
pan.oc_phonetrack_sessions                         OK
pan.oc_phonetrack_shares                           OK
pan.oc_phonetrack_tileserver                       OK
pan.oc_preferences                                 OK
pan.oc_privacy_admins                              OK
pan.oc_properties                                  OK
pan.oc_schedulingobjects                           OK
pan.oc_share                                       OK
pan.oc_share_external                              OK
pan.oc_storages                                    OK
pan.oc_systemtag                                   OK
pan.oc_systemtag_group                             OK
pan.oc_systemtag_object_mapping                    OK
pan.oc_talk_commands                               OK
pan.oc_talk_guests                                 OK
pan.oc_talk_participants                           OK
pan.oc_talk_rooms                                  OK
pan.oc_talk_signaling                              OK
pan.oc_text_documents                              OK
pan.oc_text_sessions                               OK
pan.oc_text_steps                                  OK
pan.oc_trusted_servers                             OK
pan.oc_twofactor_backupcodes                       OK
pan.oc_twofactor_providers                         OK
pan.oc_users                                       OK
pan.oc_vcategory                                   OK
pan.oc_vcategory_to_object                         OK
pan.oc_whats_new                                   OK
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.

参考文献

NextCloud手动添加文件并列出

NextCloud 自带的数据目录在列目录时都是通过数据库查询,如果需要手动在磁盘目录上添加文件并使用nextcloud列出就需要手动扫描。

sudo -u www php console.php files:scan --all

这条命令是官方提供的,但是实际使用时会报错如下:


Unknown user 1 media
+---------+-------+--------------+
| Folders | Files | Elapsed time |
+---------+-------+--------------+
| 0       | 0     | 00:00:00     |
+---------+-------+--------------+

经过信息检索发现问题,在nextcloud安装目录下使用如下命令扫描,就可以看到新添加的文件了:

$ sudo -u www php console.php files:scan --path songtianlun/files

# songtianlun 可替换为你需要扫描的用户

参考文献

kvm 虚拟化安装 Ubuntu 18.04 server

本文续上篇 《裸金属服务器 kvm 虚拟化安装 win10》继续记录使用 KVMCentos 7.5 裸金属服务器上安装 Ubuntu 18.04 Server的过程及遇到的问题。

资源准备

首先要配置好 KVM 环境,上文已经详细说明,磁盘配置类似的使用 qemu-img create -f qcow2 ubuntu.qcow2 100G 命令创建虚拟磁盘,系统镜像可以去官网下载:

Ubuntu 官网: https://ubuntu.com/ Ubuntu Server 18.04 LTS 下载: https://ubuntu.com/download/server/thank-you?country=HK&version=18.04.3&architecture=amd64

Verify your download


# Run this command in your terminal in the directory the iso was downloaded to verify the SHA256 checksum:

$ echo "b9beac143e36226aa8a0b03fc1cbb5921cff80123866e718aaeba4edb81cfa63 *ubuntu-18.04.3-live-server-amd64.iso" | shasum -a 256 --check

# You should get the following output:

ubuntu-18.04.3-live-server-amd64.iso: OK

网络配置继续使用 KVM 默认的 default nat 方式。

安装


$ virt-install \
--virt-type=kvm \
--name=nextcloud \
--hvm \
--vcpus=2 \
--memory=2048 \
--cdrom=/srv/kvm/nextcloud/ubuntu-18.04.3-live-server-amd64.iso \
--disk path=/srv/kvm/nextcloud/nextcloud.qcow2,size=500,format=qcow2 \
--network bridge=br0 \
--graphics vnc,password=kvmwin10,listen=::,port=5911 \
--autostart \
--force

安装成功后使用任意一个可以接入互联网的带有桌面换的设备上的 VNC viewer 进入 YourIp:5911 输入密码 kvmwin10,就可以进入虚拟机,然后继续安装了。

Virsh 基础命令

virsh list --all           # 查看所有运行和没有运行的虚拟机
virsh list                 # 查看在运行的虚拟机
virsh dumpxml vm-name      # 查看kvm虚拟机配置文件
virsh start vm-name        # 启动kvm虚拟机
virsh shutdown vm-name     # 正常关机

virsh destroy vm-name      # 非正常关机,强制关闭虚拟机(相当于物理机直接拔掉电源)
virsh undefine vm-name     # 删除vm的配置文件

ls /etc/libvirt/qemu
# 查看删除结果,Centos-6.6的配置文件被删除,但磁盘文件不会被删除

virsh define file-name.xml # 根据配置文件定义虚拟机
virsh suspend vm-name      # 挂起,终止
virsh resumed vm-name      # 恢复被挂起的虚拟机
virsh autostart vm-name    # 开机自启动vm
virsh console <虚拟机名称>   # 连接虚拟机

-install 常用参数说明

–name指定虚拟机名称
–memory分配内存大小。
–vcpus分配CPU核心数,最大与实体机CPU核心数相同
–disk指定虚拟机镜像,size指定分配大小单位为G。
–network网络类型,此处用的是默认,一般用的应该是bridge桥接。
–accelerate加速
–cdrom指定安装镜像iso
–vnc启用VNC远程管理,一般安装系统都要启用。
–vncport指定VNC监控端口,默认端口为5900,端口不能重复。
–vnclisten指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
–os-type=linux,windows
–os-variant=rhel6

--name      指定虚拟机名称
--ram       虚拟机内存大小,以 MB 为单位
--vcpus     分配CPU核心数,最大与实体机CPU核心数相同
–-vnc       启用VNC远程管理,一般安装系统都要启用。
–-vncport   指定VNC监控端口,默认端口为5900,端口不能重复。
–-vnclisten  指定VNC绑定IP,默认绑定127.0.0.1,这里改为0.0.0.0。
--network   虚拟机网络配置
  # 其中子选项,bridge=br0 指定桥接网卡的名称。

–os-type=linux,windows
–os-variant=rhel7.2

--disk 指定虚拟机的磁盘存储位置
  # size,初始磁盘大小,以 GB 为单位。

--location 指定安装介质路径,如光盘镜像的文件路径。
--graphics 图形化显示配置
  # 全新安装虚拟机过程中可能会有很多交互操作,比如设置语言,初始化 root 密码等等。
  # graphics 选项的作用就是配置图形化的交互方式,可以使用 vnc(一种远程桌面软件)进行链接。
  # 我们这列使用命令行的方式安装,所以这里要设置为 none,但要通过 --extra-args 选项指定终端信息,
  # 这样才能将安装过程中的交互信息输出到当前控制台。
--extra-args 根据不同的安装方式设置不同的额外选项

Ubuntu 固定ip

由于安装 Ubuntu 是为了做某应用的服务,因此需要外网访问,使用 Nat 映射端口需要固定 ip。

首先,您需要确定要配置的网络接口。 您可以使用ifconfig命令列出系统中所有连接的网络接口。

$ ifconfig -a

Ubuntu设置静态IP地址

$ sudo vim /etc/netplan/xxxx.ymal

修改这个文件:

network:
  ethernets:
    ens33:
      addresses:
      - 192.168.122.3/24
      dhcp4: false
      gateway4: 192.168.122.1
      nameservers:
        addresses:
        - 192.168.122.1
        search: []
  version: 2

说明:

# ens33:网络接口名称
# dhcp4:接收IPV4接口的dhcp属性
# dhcp6:接收IPV6接口的dhcp属性
# addresses:接口的静态地址序列
# gateway4:默认网关的IPV4地址
# Nameservers:DNS服务器地址,以,号分割

[tip type=”info” title=”小提示”] 如果在 vim 中误触,可以使用 u撤销一次操作.

u   撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作

[/tip]

保存该文件并退出。然后使用以下netplan命令应用最近的网络更改。

$ sudo netplan apply

现在再次验证所有可用的网络接口,ens33以太网接口现在应连接到本地网络,并具有IP地址.

ifconfig -a

至此,Ubuntu 虚拟机安装完成, 进入 VNC 继续后续操作就好。

彩蛋

浏览参考文献时发现一个有意思的文章《使用virt-install安装虚拟机,发行版安装代码直接复制运行》,在这里记录一下,有时间试试。


Debian 8
virt-install \
--name debian8 \
--ram 1024 \
--disk path=./debian8.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Debian 7
virt-install \
--name debian7 \
--ram 1024 \
--disk path=./debian7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant debian7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Debian 6
virt-install \
--name debian6 \
--ram 1024 \
--disk path=./debian6.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant debian6 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://ftp.nl.debian.org/debian/dists/squeeze/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 7
virt-install \
--name centos7 \
--ram 1024 \
--disk path=./centos7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/7/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 6
virt-install \
--name centos6 \
--ram 1024 \
--disk path=./centos6.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos6 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/6/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
CentOS 5
virt-install \
--name centos5 \
--ram 1024 \
--disk path=./centos5.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos5 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/5/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 14.04
virt-install \
--name ubuntu1404 \
--ram 1024 \
--disk path=./ubuntu1404.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 12.04
virt-install \
--name ubuntu1204 \
--ram 1024 \
--disk path=./ubuntu1204.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant ubuntu12.04 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
Ubuntu 10.04
virt-install \
--name ubuntu1004 \
--ram 1024 \
--disk path=./ubuntu1004.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant ubuntu10.04 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 13
virt-install \
--name opensuse13 \
--ram 1024 \
--disk path=./opensuse13.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/13.2/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 12
virt-install \
--name opensuse12 \
--ram 1024 \
--disk path=./opensuse12.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/12.3/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
OpenSUSE 11
virt-install \
--name opensuse11 \
--ram 1024 \
--disk path=./opensuse11.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://download.opensuse.org/distribution/11.4/repo/oss/' \
--extra-args 'console=ttyS0,115200n8 serial'
Generic ISO
Download an ISO file and give the filename to the --cdrom= parameter. This is used instead of --location. A VNC console is available on localhost, port 5999 for you to use.

An example for FreeBSD 10. First download the ISO:

wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-dvd1.iso
Then start virt-install:

 virt-install \
--name freebsd10 \
--ram 1024 \
--disk path=./freebsd10.qcow2,size=8 \
--vcpus 1 \
--os-type generic \
--os-variant generic \
--network bridge=virbr0 \
--graphics vnc,port=5999 \
--console pty,target_type=serial \
--cdrom ./FreeBSD-10.1-RELEASE-amd64-dvd1.iso \
You need to start up a VNC client to do the installation.

参考文献