Welcome to

快雪Tang

Home / 技术

Vagrant 扩容虚拟机硬盘

这是个老问题,而且也并不限于Vagrant box环境,实际上对于Virtualbox环境来讲是通用的。 针对Vagrant – Ubuntu 环境 最简单的办法适用于Ubuntu虚拟机。Virtualbox – Ubuntu虚拟环境在这方面最为省心。下面用Vagrant box的序列来讲解如果超简便地随心所欲扩容。 假定你已经创建了Vagrant下的Ubuntu虚拟机实例: vagrant init ubuntu/xenial vagrant up vagrant ssh 当虚拟机启动时,你会查看到ubuntu的box所带来的是一个10GB的系统盘,现在我们要扩容它到40GB,首先还是进到Vagrantfile所在的目录用 vagrant halt 关机,然后在virtualbox app的界面中选中对应的虚拟机,进入设置-存储页面,找到vmdk磁盘镜像文件所在的位置,然后用命令行进入那个文件夹,例如:`$HOME/VirtualBox VMs/demovm_osdd_1496389870606_49381/ubuntu-xenial-16.04-cloudimg.vdi` ,现在我们开始调整镜像文件: VBoxManage clonehd ubuntu-xenial-16.04-cloudimg.vmdk ubuntu-xenial-16.04-cloudimg.vdi -format VDI VBoxManage modifyhd ubuntu-xenial-16.04-cloudimg.vdi –resize 40000 现在我们建立了一个原镜像文件的副本,但是是vdi格式,并且调整了镜像的尺寸,整个过程耗时不多,非常有效。 下面就是在virtualbox中该虚拟机的设置-存储页面中,用新的vdi副本替换vmdk的镜像文件就行了。 然后就可以vagrant up && […]

Read More

vagrant 网络配置

vagrant 使用一个 ruby 语法的配置文件:Vagrantfile。 这个配置文件可以通过默认启动的方式自动生成一个。通常的教程会这么讲: # 新建并切换到一个工作目录 mkdir /dev && cd /dev # 拉回box镜像(略) vagrant box add ubuntu/trusty64 # 使用想要的box进行工作目录的初始化,这个过程中将会创建出一个新的Vagrantfile,并且你可以在启动虚拟机前修改它。 # 同时,如果box尚未存在,这一过程中也会尝试去拉取box;不过大陆还是省了吧,具体我不介绍了。 vagrant init ubuntu/trusty64 # 启动虚拟机 vagrant up # 进入虚拟机 vagrant ssh 通过上面的缺省步骤,你可以新建一个ubuntu 14的虚拟机,并且具有NAT网络配置,所以进入虚拟机后不仅能够正常上网,也能访问宿主机(IP)。 Vagrant所支持的网络模型实际上是依赖于Provider的,多数情况下采用Virtualbox作为provider时自然也就是支持virtualbox的典型网络模型:NAT,Hostonly,Bridge以及Internal。 下面摘抄Ubuntu论坛中的帖子关于这些网络模型的表述: 第一种 NAT模式 解释: […]

Read More

今天发了一个consul tags工具

缘由 因为consul都已经0.8.0了,还是没有动态修改tags的功能(这是一个老生常谈的问题了,不过consul很坚持,哪怕PR都已经做好了,只等着动动拇指了,也还是不行)参见修订,通过api去做的话,又会超级繁琐和比较没办法,所以做了一个工具去处理tags的添加、删除;进一步的,提供一个翻转的功能。 consul service能够带有一组tags,consul的编程接口和API都能够通过tags来筛选services,因此我们通常会将一个服务的实例集群的角色也提供在tags中,例如 role=master,type=disk,rw=readwrite,等等。这时候 LoadBalancer 就能够通过筛选tags来获得可用列表。 例如向 redis 服务发出 rw=readwrite 筛选条件后得到的可用实例表经过 LoadBalancer 处理后对业务层可用,这样业务层就可以写入键值;反过来筛选 rw=readonly 得到的实例表,业务层就可以读取键值,通过 LoadBalancer 附着一个 ReadWriteSpliiter 的架构设计,业务层实质上可以透明地获得负载均衡后的 redis 服务,并且该服务内部隐含地完成了读写分离的 devops 架构。 类似的,DB也可以采用这样的设计方案。 话说回来,也不必鄙视consul坚决不提供tags修改功能或者在service definition中附着一个子K/V,两者各有各的问题,而集中使用单一一个全局的K/V事实上也是相当正确的做法。然而不符合直觉啊,为什么大家总是要想reload一个新tag,而不愿意使用K/V呢,甚至愿意放弃分布锁也要改tag?这是个很严肃的问题。 key+问题 无论如何,回到我们描述的那种策略中,那么这里就存在一个问题了,consul很难动态修改tags,这样的架构设计就难以落地了。 consul确实准许重新注册相同id的实例并能够在这个场景中正确的设置到新tags集合。但那是针对string,而不是key=value。 这时要简单地把key-value应用进去就不那么便利了。不过还是可以有方法。 一种方法是对该设计进行一点点微调,采用 consul 的 KV Store 来保存服务实例的角色,并在高可用切换场景下更新该key。 这个方法成本低廉,而且实际上利用ZooKeeper,Etcd来做服务发现的案子,谁又不是这么做的呢?所谓的成本低廉,是因为 consul v0.6+ […]

Read More

gitlab-ce + ci runner meets wildcard ssl cert and unknown authorities

升级到新版gitlab-ce后,所有runner都失效了,于是升级runners后再次register,此时,由于刚刚为gitlab-ce服务器启用了我们的通配符证书(就等8.17出来后的pages功能了),于是runner们都注册不了了: # gitlab-ci-multi-runner register Running in system-mode.                                                                   […]

Read More

Slack webhook integration and gitlab event notifications, bulk enable them

在设置了全局的 Service Templates 之后,有的 webhook 插件并不能自动应用到每个项目,需要你在相应项目的service templates中去添加一次和启用。例如 SlackService 就无法在每个项目有pipeline或tag时发出通知。 为了自动使能这样的 Service Template 到任一项目,需要登录SSH到gitlab服务器,然后直接操作 pgsql 数据库: Chris Schmidt 是这么提供这一hack方案的: Open a shell on the gitlab server, and execute the following command (note, you must be logged in as a user who has […]

Read More

chinese mirror for installing gitlab

还记得去年的安装 、升级gitlab服务器的痛苦。知者自知。 不过才逛gitlab.org才发现其实有专属的镜像安装点了,好感动,特此备注: https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/ 关于这个安装点,官网叫做这样: Chinese GitLab CE mirror hosted by TUNA  

Read More

gitlab-ce 8.16.6 升级/新装的一个bug:Error executing action `run` on resource ‘ruby_block[directory resource: /var/opt/gitlab/git-data]’

这个问题是在新装 gitlab-ce 到 Ubuntu 14.04 上发生的。报错如下: # gitlab-ctl reconfigure Starting Chef Client, version 12.12.15 resolving cookbooks for run list: [“gitlab”] Synchronizing Cookbooks: – package (0.0.0) – runit (0.14.2) – gitlab (0.0.1) Installing Cookbook Gems: Compiling Cookbooks… Recipe: gitlab::default * directory[/etc/gitlab] […]

Read More

markdown 编辑器和截屏

  • Post By:
  • Date:
  • Category: 技术

主力的Markdown编辑器,首推自然是Typora了,轻巧的单窗口app,大纲模式,网上的图片直接复制后粘贴进来就是、拖拽也可以(本地的图片直接拖拽,而且能自动复制和集中到一个_images子目录下以便分发)。 但它还有一个问题没有解决,例如当你截图到剪贴板了之后,要粘贴到文章里就没戏了。 为了解决或者说改善这个问题,我最终选择的是Lightshot提供的服务。

Read More

新年之前,动画真正深入了一次

  • Post By:
  • Date:
  • Category: 技术

当然,好多需要深入…… iOS动画资料很多,没什么难度;Android的新动画需要重新理解一遍;macOS正在研究……  

Read More

macOS 开发:实现一个 delay()

delay() 的实现到处都是,下面是一个 Swift 3 版本的,适用于macOS: public typealias Task = (_ cancel : Bool) -> Void extension CommonUtil { public static func delay(_ after : TimeInterval, task : @escaping ()->()) -> Task? { return delay(after.dispatchTimeInterval, task: task) } /** 异步延迟调用一个闭包. Samples: […]

Read More