chrome os, crostini, 开发环境

chrome os, crostini, 开发环境 crostini 的Debian 对snap 支持不全, 不能使用snap 应用 terminal https://snugug.com/musings/developing-on-chrome-os/ terminal, tilix crostini默认的terminal在使用oh my zsh时,光标显示不正常。 安装tilix,从chromeos启动tilix使用terminal sudo pacman -S tilix # 在chromeos中启动tilix使用shell 或者使用Secure Shell App idea 慢的问题 File->Settings->Plugins. Click marketplace, search for “Choose Runtime” Install official Choose Runtime addon from JetBrains Wait for install and click to restart IDE. Once back in project, press shift twice to open the search window Search for Runtime. Select “Choose Runtime” Change to “jbrsdk-8u-232-linux-x64-b1638.6.tar.gz”, which should be the very last one at the bottom of the list. ...

2020-02-17 · 1 min · 93 words · -

xxd

xxd, 以 16进制查看文件 xxd 命令用于使用二进制或十六进制格式显示文件内容,可以将指定文件或标准输入以十六进制转储,也可以把十六进制转储转换成原来的二进制形式。 command xxd -b file xxd file

2020-02-14 · 1 min · 11 words · -

tr command

tr command # 转大写 echo 'hello' | tr '[:lower:]' '[:upper:]' # 转小写 echo 'HELLO' | tr '[:upper:]' '[:lower:]' # 删除文本中的换行符 tr -d '\n' < input.txt > output.txt # 删除空行 cat file | tr -s "\n" > new_file tr -s "[\012]" < plan.txt tr -s ["\n"] < plan.txt 什么是 tr 命令? tr, translate 的简写 \NNN character with octal value NNN (1 to 3 octal digits) \\ backslash \a audible BEL \b backspace \f form feed \n new line \r return \t horizontal tab \v vertical tab CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order [CHAR*] in SET2, copies of CHAR until length of SET1 [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 [:alnum:] all letters and digits [:alpha:] all letters [:blank:] all horizontal whitespace [:cntrl:] all control characters [:digit:] all digits [:graph:] all printable characters, not including space [:lower:] all lower case letters [:print:] all printable characters, including space [:punct:] all punctuation characters [:space:] all horizontal or vertical whitespace [:upper:] all upper case letters [:xdigit:] all hexadecimal digits [=CHAR=] all characters which are equivalent to CHAR https://blog.csdn.net/jeffreyst_zb/article/details/8047065 通过使用tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed的 (极其) 简化的变体: 它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr所能够做的。 ...

2020-02-14 · 5 min · 1054 words · -

golang unsigned shift, 无符号右移

‘golang unsigned shift, 无符号右移’ int32 转 uint32 再右移 https://stackoverflow.com/questions/33336336/go-perform-unsigned-shift-operation func Test10(t *testing.T) { x1 := -100 result := uint32(x1) >> 2 fmt.Println(result) }

2020-02-11 · 1 min · 23 words · -

golang interface

golang interface interface 是一种类型 type foo interface { Get() int } 首先 interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为。 go 允许不带任何方法的 interface ,这种类型的 interface 叫 empty interface。 如果一个类型实现了一个 interface 中所有方法,我们说类型实现了该 interface,所以所有类型都实现了 empty interface,因为任何一种类型至少实现了 0 个方法。go 没有显式的关键字用来实现 interface,只需要实现 interface 包含的方法即可。 ‘golang 获取interface{} 的数据类型’ https://blog.csdn.net/xia_xing/article/details/49423771 interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( “fmt” ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { ...

2020-02-11 · 1 min · 183 words · -

mount --bind

mount –bind https://xionchen.github.io/2016/08/25/linux-bind-mount/ The bind mounts bind 是 mount 中比较特殊的用法之一,这里对一些例子进行分析和实验 bind 的意思是,把其他地方的子树再进行挂载,也就是说可以把文件系统中的某一个部分进行挂载。这个特性是从 linux2.4.0 开始的。 或者更简单的说,就是挂载一个已有的文件夹 常见使用场景 在做一些 chroot 的操作的时候, 我们希望把当前的文件系统的一个目录(例如/dev) 出现在 chroot 的目录下. 但是又不希望 chroot 对这个目录进行更改, 我们该怎么做呢? 首先, 我们可以使用 mount –bind 将 /dev 目录挂载到 chroot 的目录下: mount --bind /dev $chrootdir/dev 这样, 我们从chroot的目录和自己本身的文件系统的目录就都可以访问/dev目录. 不过有时我们不希望挂载的目录是可以修改的. 那么,可以通过下面的命令将挂载的属性设置为 readonly 的这样就实现了上述的要求 mount -o remount,ro,bind /dev $chrootdir/dev 最基础的用法的如下 mount --bind olddir newdir 如果执行了上面这个命令,在 olddir 和 newdir 都可以访问相同的内容,并且如果对其中一个目录内的内容进行了修改,在另一个目录会有相同的显示。 下面的命令可以创建一个挂载点 mount --bind foo foo 在挂载后可以通过 mount 命令查看所有的挂载点 如果要递归的挂载一个目录可以使用如下命令 mount -rbind olddir newdir 递归的挂载是指如果挂载的 olddir 内有挂载点,会把这个挂载点也一起挂载到 newdir 下。 ...

2020-02-11 · 1 min · 96 words · -

sftp

sftp https://linuxize.com/post/how-to-use-linux-sftp-command-to-transfer-files/ sftp remote_username@server_ip_or_hostname >sftp pwd >sftp ls >sftp cd /tmp >sftp lcd ~/tmp >sftp get foo.zip

2020-02-11 · 1 min · 17 words · -

remote jobs

remote jobs https://github.com/remoteintech/remote-jobs https://github.com/lukasz-madon/awesome-remote-job

2020-02-09 · 1 min · 4 words · -

google voice

google voice Apple客服: +1(800)275-2273 微软客服: +1 (800) 642-7676 Google Voice简介及使用&保号 保号 电话呼出 可以找有GV的熟人互打,相信网友为了隐私起见是不会和你互打的。这里也提供几个免费的美国号码供大家拨打: +1 (415) 787-4253 某IFTTT的定时拨号服务御用号码,是机器人 +1 (888) 280-4331 亚马逊免费客服电话 电话呼入 IFTTT 我觉得这是最优解,用IFTTT的定时服务定期拨打电话给你即可,这里推荐两个service Keep Google Voice Active 一个月拨打一次,可自定义时间和日期 Alarm Clock Phone Call 强迫症福利,可自定义拨打频率、时间

2020-02-08 · 1 min · 34 words · -

Spring静态注入的三种方式

Spring静态注入的三种方式 Spring静态注入的三种方式: (说明: MongoFileOperationUtil是自己封装的一个Mongodb文件读写工具类,里面需要依赖AdvancedDatastore对象实例,dsForRW用来获取Mongodb数据源) 在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这种方式: @Autowired private static AdvancedDatastore dsForRW; 可以试一下,dsForRW在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。 但是自己比较喜欢封装工具类,并通过@Component注解成功能组件,但是功能组件中的方法一般都是静态方法,静态方法只能调用静态成员变量,于是就有了下面的问题。封有的时候封装功能组件会需要底层的service注入,怎么办呢? 去网上搜了下解决办法,简单总结一下几种实现方式; 1.xml方式实现; public class MongoFileOperationUtil { private static AdvancedDatastore dsForRW; private static MongoFileOperationUtil mongoFileOperationUtil; public void init() { mongoFileOperationUtil = this; mongoFileOperationUtil.dsForRW = this.dsForRW; } } 这种方式适合基于XML配置的WEB项目; 2.@PostConstruct方式实现; import org.mongodb.morphia.AdvancedDatastore; import org.springframework.beans.factory.annotation.Autowired; @Component public class MongoFileOperationUtil { @Autowired private static AdvancedDatastore dsForRW; private static MongoFileOperationUtil mongoFileOperationUtil; @PostConstruct public void init() { mongoFileOperationUtil = this; mongoFileOperationUtil.dsForRW = this.dsForRW; } } ...

2020-02-06 · 1 min · 119 words · -

huawei vpn, sslvpn, secoclient in archlinux, 华为SSLVPN客户端

huawei vpn, sslvpn, secoclient in archlinux, 华为SSLVPN客户端 下载安装包 http://www.corem.com.cn/index.php/service/tools/secoclient 官方只提供了ubuntu版本,用以下方式可以在 archlinux 上使用。 sudo -i # seco client 依赖 ubuntu 的 arch 命令, 模拟 arch 命令返回 x86_64 echo "echo x86_64" > /usr/bin/arch chmod u+x /usr/bin/arch # install seco client ./secoclient-linux-64-6.0.2.run # 启动后台服务 cd /usr/local/SecoClient/promote ./SecoClientPromoteService -d # 启动secoclient UI cd /usr/local/SecoClient/ ./SecoClient 启动脚本 把 server_address 替换成服务端IP #!/bin/bash sudo ip route del <server_address> count=`ps -ef |grep SecoClientPromoteService |grep -v "grep" |wc -l` echo $count if [ 0 == $count ];then cd /usr/local/SecoClient/promote sudo ./SecoClientPromoteService -d fi count=`ps -ef |grep SecoClient |grep -v "grep" |wc -l` echo $count if [ 1 == $count ];then cd /usr/local/SecoClient/ sudo ./SecoClient fi crostini # in crostini export WAYLAND_DISPLAY=wayland-0 # user id 使用非0数字(非root的已有用户id,如1000,填0 时,secoclient无法启动) export XDG_RUNTIME_DIR=/run/user/<user id> /opt/google/cros-containers/bin/sommelier -X ./SecoClient

2020-02-01 · 1 min · 123 words · -

linux 挂载 windows共享

linux 挂载 windows共享 先在 Windows 下面共享需要挂载的目录 sudo mount -t cifs -o username=<username>,password=<password> //192.168.50.104/path/to/win/share /mnt/path/to/linux/mnt/dir # windows域控账户不需要加前缀,直接写用户名 # 查看挂载状态 df -h # 卸载 umount /mnt/path/to/linux/mnt/dir https://blog.csdn.net/tojohnonly/article/details/71374984

2020-02-01 · 1 min · 25 words · -

kafka rebalance

kafka rebalance Kafka session.timeout.ms heartbeat.interval.ms 参数的区别以及对数据存储的一些思考 在计算机世界中经常需要与数据打交道,这也是我们戏称 CURD 工程师的原因之一。写了两年代码,接触了不少存储系统,Redis、MySQL、Kafka、Elasticsearch 慢慢地发现背后的一些公共的设计思想总是那么似曾相识,再深究一下,就会发现一些隐藏在这些系统背后的数学理论。 生活中产生的大量数据需要交由计算机来处理,根据处理方式的不同分为 OLTP 和 OLAP 两大类应用。有些数据比如登录流水、系统日志信息,源源不断, 先采集下来抛给消息中间件(Kafka);有些数据,比如一条描述用户特征的记录,就适合存储到 MySQL,并按日期建查询索引。也就是说:面对大量的数据, 把数据存储起来只是一小步,重要的是如何把这些数据用起来,体现到存储系统则是:有没有一套方便的查询接口能够方便快速地查到我们想要的数据。 如果将数据放到 Kafka上了,那要怎么查?如果把数据放到 MySQL 上了,非常适合针对高 cardinality 列建 B+ 树索引查询,而对于文本类的数据,放到 ES 上, 则基于倒排索引这种数据结构,根据 tf-idf、bm25 等这些衡量文档相似度的算法来快速地获得想要的数据。 从这也可以看出,不同的存储系统,为了满足"查询",它们背后的存储原理(所采用的数据结构)是不同的。而对于这些存储系统而言,都面临着两个问题: 高可靠性和高可用性。可靠性,在我看来,是站在存储系统本身来看,一般是讨论单个实例如何保证数据的可靠。 比如,一个正在运行的MySQL实例,它根据checkpoint机制,通过redo log 文件来保证持久性,另外还有double write buffer,保证数据页的写入是可靠的。 类似地,在 Elasticsearch 里面也有 translog 机制,用来保证数据的可靠性。所以,想深入了解存储系统,不妨对比一下它们之间的各种 checkpoint 机制。 数据为什么需要有可靠性呢?根本原因还是内存是一种易失性存储,根据冯偌依曼体系结构,程序总是从内存中取数据交给CPU做运算。如果数据没有fsync到磁盘, 如果系统宕机那数据会不会丢? 而对于可用性,是从Client角度而言的。即我不管你背后是一个redis实例还是一个redis 集群,你只管正常地给我提供好读写服务就好了。这里为了避免SPOF, 分布式集群就派上用场了,一台机器挂了,另一台机器顶上。在分布式系统中,需要管理好各个存储实例,这时就需要节点的角色划分,比如master节点、controller节点之类的称呼。 毕竟管理是要有层级的嘛,大家角色都一样,怎么管理呢?在这一点上,Redis集群与Kafka集群或者Elasticsearch集群有很大的不同, 具体体现在Redis本质上是一个P2P结构的集群,而Elasticsearch和Kafka 采用的主从模型,为什么这么说呢?Redis虽然也有Master节点和Slave节点之分, 但它的各个Master节点之间是平等的,Redis的数据分布方式是hash16384个槽到各个master节点上,每个master节点负责处理落在这些槽内的数据, 这是从数据分布的角度来定义的Master节点,而Kafka中的Controller节点、Elasticsearch中的master节点并不是从数据分布的角度定义的,而是从集群元信息维护、 集群管理的角度定义的,关于它们之间的具体区别我在这篇文章中也有过一些描述。另外,MySQL作为关系型数据库,受数据完整性约束、事务支持的限制,在分布式集群能力上要弱一些。 最近碰到一个问题,多个业务往向一个 Kafka topic 发送消息,有些业务的消费量很大,有些业务的消息量很小。因 Kafka 尚未较好地支持按优先级来消费消息, 导致某些业务的消息消费延时的问题。一种简单的解决方案是再增加几个Topic,面对一些系统遗留问题,增加Topic带来的是生产者和消费者处理逻辑复杂性。 一种方法是使用Kafka Standalone consumer,先使用 consumer.partitionFor(“TOPIC_NAME”) 获取 topic 下的所有分区信息, 再使用consumer.assign(partitions)显示地为consumer指定消费分区。另一种方法是基于 consumer group 自定义 Kafka consumer 的分区分配策略, 那这时候就得对Kafka目前已有的分区分配策略有所了解,并且明白什么时候、什么场景下触发 rebalance? ...

2020-01-28 · 3 min · 450 words · -

pixel2, pixel3 root, android root

pixel2,pixel3 root, android root 线刷 android 安卓线刷升级 flash factory image for android device http://blog.wiloon.com/android/factory-image Enable USB Debugging mode Download MagiskManager apk 并安装 到手机 https://github.com/topjohnwu/Magisk 从第一步线刷升级用的镜像文件 image-blueline-sp1a.210812.016.c2.zip 里解压出 boot.img, 传到手机上的 download 目录 打开magisk mamanger, 点击 “未安装 Magisk” 后面的安装按钮, 在弹出的菜单中选择 “选择并修补一个文件 “, 然后 选择boot.img。 把打好补丁的boot.img传到电脑上 , 打补丁之后的boot.img的名字 应该 是magisk_patched.img 执行 adb reboot bootloader,到bootloader 刷入打好补丁的 boot.img fastboot flash boot patched_boot.img fastboot reboot 重启后系统已经root成功了。 https://blog.csdn.net/Ender_Zhao/article/details/108615512 https://www.teamandroid.com/2019/03/17/root-android-q-beta-google-pixel-2-pixel/embed/#?secret=dymLQPYWmm android root pixel Download Magisk Root https://github.com/topjohnwu/Magisk Download the TWRP Recovery ...

2020-01-26 · 1 min · 117 words · -

buildah

buildah # removes all dangling images, same as docker prune podman image prune # remove image buildah rmi 0d2d0133941b sudo pacman -S fuse-overlayfs sudo pacman -S buildah # login buildah login container.wiloon.com buildah login --tls-verify=false container.wiloon.com # buildah needs to run as root!!! # list all the images buildah images # build ### buildah bud -f Dockerfile -t <tag0> . buildah bud -f Dockerfile -t fedora-httpd . buildah push registry.wiloon.com/pingd-proxy:v0.0.1 # list all containers buildah containers buildah run <container name> buildah run $container -- dnf -y install java buildah rm $newcontainer buildah push fedora-bashecho docker-daemon:fedora-bashecho:latest container0=$(buildah from timer0) buildah run $container0 http: server gave HTTP response to HTTPS client https://github.com/containers/buildah/issues/4788 ...

2020-01-20 · 1 min · 114 words · -

linux capability, setcap/getcap

linux capability, setcap/getcap http://www.cnblogs.com/iamfy/archive/2012/09/20/2694977.html 一)概述: 1)从2.1版开始,Linux内核有了能力(capability)的概念,即它打破了UNIX/LINUX操作系统中超级用户/普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作. 2)capability可以作用在进程上(受限),也可以作用在程序文件上,它与sudo不同,sudo只针对用户/程序/文件的概述,即sudo可以配置某个用户可以执行某个命令,可以更改某个文件,而capability是让某个程序拥有某种能力,例如: capability让/tmp/testkill程序可以kill掉其它进程,但它不能mount设备节点到目录,也不能重启系统,因为我们只指定了它kill的能力,即使程序有问题也不会超出能力范围. 3)每个进程有三个和能力有关的位图:inheritable(I),permitted(P)和effective(E),对应进程描述符task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted,所以我们可以查看/proc/PID/status来查看进程的能力. 4)cap_effective:当一个进程要进行某个特权操作时,操作系统会检查cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0. 例如,如果一个进程要设置系统的时钟,Linux的内核就会检查cap_effective的CAP_SYS_TIME位(第25位)是否有效. 5)cap_permitted:表示进程能够使用的能力,在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集. 6)cap_inheritable:表示能够被当前进程执行的程序继承的能力. Linux是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权限赋予一个单一的帐户-root。root帐户用来管理系统、安装软件、管理帐户、运行某些服务、安装/卸载文件系统、管理用户、安装软件等。另外,普通用户的很多操作也需要root权限,这通过setuid实现。 这种依赖单一帐户执行特权操作的方式加大了系统的面临风险,而需要root权限的程序可能只是为了一个单一的操作,例如: 绑定到特权端口、打开一个 只有root权限可以访问的文件。某些程序可能有安全漏洞,而如果程序不是以root的权限运行,其存在的漏洞就不可能对系统造成什么威胁。 从2.1版开始,内核开发人员在Linux内核中加入了能力(capability)的概念。其目标是消除需要执行某些操作的程序对root帐户的依赖。从2.2版本的内核开始,这些代基本可以使用了,虽然还存在一些问题,但是方向是正确的。 2.Linux内核能力详解 传统UNIX的信任状模型非常简单,就是"超级用户对普通用户"模型。在这种模型中,一个进程要么什么都能做,要么几乎什么也不能做,这取决于进程 的UID。如果一个进程需要执行绑定到私有端口、加载/卸载内核模块以及管理文件系统等操作时,就需要完全的root权限。很显然这样做对系统安全存在很 大的威胁。UNIX系统中的SUID问题就是由这种信任状模型造成的。例如,一个普通用户需要使用ping命令。这是一个SUID命令,会以root的权 限运行。而实际上这个程序只是需要RAW socket 建立必要ICMP数据包,除此之外的其它root权限对这个程序都是没有必要的。如果程序编写不好,就可能 被攻击者利用,获得系统的控制权。 使用能力(capability)可以减小这种风险。系统管理员为了系统的安全可以剥夺root用户的能力,这样即使root用户也将无法进行某些 操作。而这个过程又是不可逆的,也就是说如果一种能力被删除,除非重新启动系统,否则即使root用户也无法重新添加被删除的能力。 3.权限说明 Capabilities的主要思想在于分割root用户的特权,即将root的特权分割成不同的能力,每种能力代表一定的特权操作。例如: 能力CAP_SYS_MODULE表示用户能够加载(或卸载)内核模块的特权操作,而CAP_SETUID表示用户能够修改进程用户身份的特权操作。在Capbilities中系统将根据进程拥有的能力来进行特权操作的访问控制。 在Capilities中,只有进程和可执行文件才具有能力,每个进程拥有三组能力集,分别称为cap_effective, cap_inheritable, cap_permitted(分别简记为:pE,pI,pP),其中cap_permitted表示进程所拥有的最大能力集;cap_effective表示进程当前可用的能力集,可以看做是cap_permitted的一个子集;而cap_inheitable则表示进程可以传递给其子进程的能力集。系统根据进程的cap_effective能力集进行访问控制,cap_effective为cap_permitted的子集,进程可以通过取消cap_effective中的某些能力来放弃进程的一些特权。可执行文件也拥有三组能力集,对应于进程的三组能力集,分别称为cap_effective, cap_allowed 和 cap_forced (分别简记为fE,fI,fP) ,其中,cap_allowed表示程序运行时可从原进程的cap_inheritable中集成的能力集,cap_forced表示运行文件时必须拥有才能完成其服务的能力集;而cap_effective则表示文件开始运行时可以使用的能力。 Linux内核从2.2版本开始,就加进的Capabilities的概念与机制,并随着版本升高逐步得到改进。在linux中,root权限被分割成一下29中能力: CAP_CHOWN:修改文件属主的权限 CAP_DAC_OVERRIDE:忽略文件的DAC访问限制 CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制 CAP_FOWNER: 忽略文件属主ID必须和进程用户ID相匹配的限制 CAP_FSETID:允许设置文件的setuid位 CAP_KILL:允许对不属于自己的进程发送信号 CAP_SETGID:允许改变进程的组ID CAP_SETUID:允许改变进程的用户ID CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力 CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志 CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口 CAP_NET_BROADCAST:允许网络广播和多播访问 CAP_NET_ADMIN:允许执行网络管理任务 CAP_NET_RAW:允许使用原始 socket CAP_IPC_LOCK:允许锁定共享内存片段 CAP_IPC_OWNER:忽略IPC所有权检查 CAP_SYS_MODULE:允许插入和删除内核模块 CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备 CAP_SYS_CHROOT:允许使用chroot()系统调用 CAP_SYS_PTRACE:允许跟踪任何进程 CAP_SYS_PACCT:允许执行进程的BSD式审计 CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等 CAP_SYS_BOOT:允许重新启动系统 CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级 CAP_SYS_RESOURCE:忽略资源限制 CAP_SYS_TIME:允许改变系统时钟 ...

2020-01-18 · 1 min · 133 words · -

Podman, Buildah, Skopeo

Podman, Buildah, Skopeo podman Podman是该工具套件的核心,用来替换Docker中了大多数子命令 (RUN,PUSH,PULL等) 。Podman无需守护进程,使用用户命名空间来模拟容器中的root,无需连接到具有root权限的 socket 保证容器的体系安全。 Podman专注于维护和修改OCI镜像的所有命令和功能,例如拉动和标记。它还允许我们创建,运行和维护从这些镜像创建的容器。 目前有很多可用的容器引擎,不过 Docker 最突出的竞争对手是由 Red Hat 开发的 Podman。与 Docker 不同,Podman 不需要守护进程,也不需要 root 特权,这是 Docker 长期以来一直存在的问题。从它的名字就可以看出来,Podman 不仅可以运行容器,还可以运行 Pod。Pod 是 Kubernetes 的最小计算单元,由一个或多个容器(主容器和所谓的边车)组成,Podman 用户在以后可以更容易地将他们的工作负载迁移到 Kubernetes。 Buildah Buildah 是套件中的 Build 工具,用来构建OCI镜像。虽然 Podman 也可以用户构建 Docker 镜像,但是构建速度超慢,并且默认情况下使用 vfs 存储驱动程序会消耗大量磁盘空间。 而 buildah bud (使用Dockerfile构建) 非常快,并使用覆盖存储驱动程序,可以节约大量的空间。 Buildah (https://buildah.io) 。Buildah 是 Red Hat 开发的一款工具,可以很好地与 Podman 配合使用。如果你已经安装了 Podman,可能会注意到 podman build 子命令,它实际上是经过包装的 Buildah。 Skopeo Skopeo是套件中镜像管理工具,允许我们通过推,拉和复制镜像来处理Docker和OC镜像。 https://zhuanlan.zhihu.com/p/77373246 除了 Docker 和 Podman 之外,还有其他容器引擎,但我认为它们没有出路或者都不适合用于本地开发。不过如果你想要对容器引擎有一个较为完整的了解,我们可以列出一些: LXD——是 LXC (Linux 容器)的容器管理器(守护进程)。这个工具提供了运行系统容器的能力,这些系统容器提供了类似于 VM 的容器环境。它比较小众,没有很多用户,所以除非你有特定的用例,否则最好使用 Docker 或 Podman。 CRI-O——如果你在网上搜索 cri-o 是什么东西,你可能会发现它被描述为一种容器引擎。不过,它实际上是一种容器运行时。除了不是容器引擎之外,它也不适合用于“一般”的情况。我的意思是,它是专门为 Kubernetes 运行时(CRI)而构建的,并不是给最终用户使用的。 rkt——rkt(“rocket”)是由 CoreOS 开发的容器引擎。这里提到这个项目只是为了清单的完整性,因为这个项目已经结束了,它的开发也停止了——因此它不应该再被使用。 ...

2020-01-18 · 1 min · 118 words · -

CentOS firewalld, firewall-cmd

‘CentOS firewalld, firewall-cmd’ Firewalld 使用区域和服务的概念。根据您将要配置的区域和服务,您可以控制允许或阻止与系统之间的流量。 可以使用 firewall-cmd 命令行实用程序配置和管理 Firewalld 。 在 CentOS 8 中, nftables 替代了 iptables,作为 firewalld 守护程序的默认防火墙后端。 防火墙区域 区域是预定义的规则集,用于指定计算机连接到的网络的信任级别。您可以将网络接口和源分配给区域。 以下是 FirewallD 提供的区域,根据区域的信任级别从不信任到信任: drop: 删除所有传入连接,而无任何通知。仅允许传出连接。 block: 拒绝所有传入连接,并带有一条 icmp-host-prohibited 消息 IPv4 和一条 icmp6-adm-prohibited 关于 IPv6n 的消息。仅允许传出连接。 public: 用于不受信任的公共区域。您不信任网络上的其他计算机,但是可以允许选择的传入连接。 external: 用于在系统充当网关或路由器时启用 NAT 伪装的外部网络。仅允许选择的传入连接。 internal: 当系统充当网关或路由器时,用于内部网络。网络上的其他系统通常是受信任的。仅允许选择的传入连接。 dmz: 用于非军事区中访问网络其余部分的计算机。仅允许选择的传入连接。 work: 用于工作机。网络上的其他计算机通常是受信任的。仅允许选择的传入连接。 home: 用于家用机器。网络上的其他计算机通常是受信任的。仅允许选择的传入连接。 Trusted: 接受所有网络连接。信任网络中的所有计算机。 centos 7 firewall # 启动守护程序 systemctl start firewalld --now # 查看版本 firewall-cmd --version # 查看状态 systemctl status firewalld.service # OR firewall-cmd --state # 查看默认区域 firewall-cmd --get-default-zone # firewall-cmd --zone=public --list-ports firewall-cmd --zone=public --add-port=8080/tcp firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --remove-port=8080/tcp 防火墙区域 默认的区域设置为 public ,并且所有网络接口都分配给该区域,当然您可以根据自己的需要修改默认区域。 默认区域是用于所有未明确分配给另一个区域的区域。 您可以通过键入以下内容查看默认区域: ...

2020-01-17 · 2 min · 285 words · -

伪共享 (false sharing)

伪共享 (false sharing) 伪共享的非标准定义为: 缓存系统中是以缓存行 (cache line) 为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。 https://www.cnblogs.com/cyfonly/p/5800758.html

2020-01-13 · 1 min · 9 words · -

archlinux grub

archlinux grub parted flag For parted set/activate the flag bios_grub on the partition. parted -a optimal /dev/sda set 1 bios_grub on pacman -S grub # where /dev/sdX is the disk (not a partition) grub-install --target=i386-pc /dev/sdX grub-mkconfig -o /boot/grub/grub.cfg ### exit arch-chroot exit # 重启 reboot

2020-01-12 · 1 min · 46 words · -