Life is different

ideal's blog


  • 首页

  • 归档
ideal">

cross compling Nginx for ARMv8

发表于 2020-02-26 | 评论数:

首先我们需要一个工具链,目前有很多可以选择,此处我们选择Linaro,这是一种预先构建好的工具链。甚至也可以通过工具构建一个工具链,比如Buildroot,但此处我们不需要那么复杂。

其次按照自己的需求从这里来选择一个工具链下载,比如我期望将Nginx运行在NanoPI Neo2上面,处理器属于ARMv8,其上运行的系统是基于Ubuntu Core构建(使用glibc),所以我应该选择aarch64-linux-gnu。这个三项代表cpu-vendor-os,在这里有说明。

另外要注意具体的工具链版本,比如这个版本 https://releases.linaro.org/components/toolchain/binaries/latest-7/ 里面提到glibc是2.25,但是我那个系统里面的glibc版本并没有这么高,如果用这个来编译,再放到我的NanoPI Neo2里面去运行,会导致运行时GLIBC_2.25符号找不到的错误。所以这里我选择https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/aarch64-linux-gnu/gcc-linaro-6.5.0-2018.12-x86_64_aarch64-linux-gnu.tar.xz 。

阅读全文 »
ideal">

access multiple clusters with kubernetes context

发表于 2019-10-18 | 评论数:

有时候往往需要和多个Kubernetes集群交互,我之前一直是每个集群一个config文件,然后通过cp ~/.kube/config.xxxx ~/.kube/config这样来切换🤦‍♂️。

其实通过Kubernetes的Context,就不用这么麻烦了。不过按照文档操作有点繁琐,其实自己编辑~/.kube/config就行了,不过记得先备份一下。就是把其他集群的cluster、user、context分别添加一份到~/.kube/config,注意改下名字之类。

之后就可以这样kubectl config use-context minikube来切换context为minikube了。执行kubectl config current-context可以显示当前的context。但是这个命令还是太长了,不友好。可以安装kubectx,支持交互式操作(配合fzf)来选择并切换context和namespace。在macOS只要执行brew install kubectx就能安装了。

下面是执行kubectx的效果:

kubectx

同样,执行kubens可以列出当前context指定集群的可用namespace,然后通过方向键选择。之后执行kubectl get pod就不用指定--context=xxx -n=yyy来操作了。

更进一步,由于kubectl支持插件机制,我们只要执行:

1
2
ln -s /usr/local/bin/kubectx /usr/local/bin/kubectl-ctx
ln -s /usr/local/bin/kubens /usr/local/bin/kubectl-ns

然后只要运行kubectl ctx和kubectl ns就行了,不需要再敲kubectx和kubens。

ideal">

nginx unit introduction

发表于 2019-10-17 | 评论数:

前几天发现NGINX又搞了个Unit,简单来说是一个web应用容器,特点是可以通过RESTful风格的API进行动态配置(不需要NGINX那样该配置然后重启),并且支持Python、Go、PHP、Java等等一大堆语言。不知道是不是受了Passenger的启发。

这里记录一下试用的笔记。

安装

ArchLinux可以通过PKGBUILD安装,makepkg之后sudo pacman -U *.xz即可。

启动

执行sudo systemctl start unit即可。

配置

写一个config.json,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"listeners": {
"*:8000": {
"pass": "applications/phalcon-test"
}
},

"applications": {
"phalcon-test": {
"type": "php",
"processes": 5,
"user": "vagrant",
"group": "vagrant",
"script": "index.php",
"root": "/home/vagrant/project/mvc/multiple-volt/public"
}
},

"routes": [
{
"action": {
"pass": "applications/phalcon-test"
}
}
]
}

表示启动一个PHP类型的应用,并让Unit监听8000端口,将所有请求抛给那个PHP应用。

阅读全文 »
ideal">

login screen black after upgrading

发表于 2019-10-08 | 评论数:

10.7号pacman -Syu了一把,重启发现手动编译的内核系统登录界面停在了启动图形系统,然后一直没反应。不过ALT-F2可以登录tty,然后执行systemctl status sddm发现sddm并没有启动X。如果手动启动X,会看到两个报错:

1
2
Internal error: Could not resolve keysym XF86MonBrightnessCycle
Internal error: Could not resolve keysym XF86RotationLockToggle

不过这两个报错并不会影响X的功能。X启动之后依然黑屏。

切换到archlinux自带的内核,却又没问题。sddm最近也没有更新过。KDE倒是进行了大更新。由于只剩下内核的差异(手动编译的内核只是增加了CONFIG_DEBUG_INFO=y),于是我将archlinux内核新的config文件复制一份,重新编译了4.18.12,然而重启依然黑屏。

sudo journal -u -e sddm可以看到黑屏的情况,缺少了Adding new display on vt1。

sddm log

还未解决。。

ideal">

display command execute logs in html pages

发表于 2019-08-04 | 评论数:

有些时候需要把命令行程序的日志在页面中展示,比如这种场景。通常日志里可能含有进度的展示,比如curl的输出,这种展示依赖于\r这种控制字符来起作用。遗憾的是如果直接作为html来输出,\r会被当作换行,导致进度变成了无数行,比如这里的样子(虽然可能也不是大问题)。另外终端里也会有很多依赖转义序列来实现的带色彩的输出,比如git log的输出。题外话,有时候stdout的类型,会影响这个特性,比如git log | less当加上了管道之后,彩色输出会消失。这里有一些绕过的方法。

阅读全文 »
ideal">

kubernetes中通过subPath挂载子目录

发表于 2019-08-02 | 评论数:

kubernetes支持很多种Volume,比如NFS,甚至AWS的EBS,阿里云的OSS等。某些时候,我们可能需要针对不同的容器,挂载一个存储卷的不同子目录,以达到控制权限等目的。比如将用户数据放在一个NFS文件系统上,不同的用户区分不同的子目录。如果每个用户的容器,都直接挂载了整个NFS,同时又不能封禁容器的外网访问,那么这样是不安全的,如果被反弹Shell之后,会存在安全隐患。我们可以通过subPath来解决这个问题。以hostPath类型的Volume为例,假设我们需要挂载/srv/aaa/bbb这个目录到/mnt/aaa/bbb,以及/srv/ccc/ddd目录到/mnt/ccc/ddd,而/srv下面的其他目录和文件,希望在容器中不可见,那么这样就可以做到:

阅读全文 »
ideal">

kubernetes中的容器cpu和内存限制

发表于 2019-07-01 | 评论数:

K8S部署容器时可以指定CPU和内存的资源限制,其真正实现也是通过CGroups做到的。我们来看个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
memory: 400Mi
requests:
cpu: 200m
memory: 200Mi
阅读全文 »
ideal">

mysql embedded server example

发表于 2019-02-18 | 评论数:

MySQL有一种作为嵌入运行服务器的方式。此处做个记录。
另外5.7的mysql_library_init()还有相关的说明,8.0的已经没有了。

阅读全文 »
ideal">

separate executable file and debug infomation

发表于 2018-11-30 | 评论数:

很多发行版会将包含调试符号信息的文件拆分到另外的安装包里,所以相应的wiki也会教你遇到进程崩溃时,如何获取完整的调用栈信息,其中一步便是安装带有调试信息的软件包,比如这里、这里。

至于为什么可以这么做,这其实是GDB的机制。按照这里的描述,GDB支持独立于可执行文件的调试符号信息。

阅读全文 »
ideal">

simple way to compile kernel on archlinux

发表于 2018-10-28 | 评论数:

实际上ArchLinux的Wiki已经写得非常清楚了,这里只是记录、简化和补充。

首先下载一份源代码,比如这个。同时下载对应的签名,比如这个。

验证签名:

1
2
$ gpg --list-packets linux-4.19.tar.sign
$ gpg --recv-keys <上一步输出的keyid>

第二步之后可以通过gpg --list-public-keys查看导入的公钥。

然后进行验证:

1
2
$ unxz linux-4.19.tar.xz
$ gpg --verify linux-4.19.tar.sign linux-4.19.tar
阅读全文 »
12

ideal

14 日志
12 标签
GitHub Twitter
© 2020 ideal