iic/i2c通讯数据格式
以下是来源于一款iic产品,但其iic标准格式代表了大部分的iic产品数据格式。
所以如果你拿到一款iic产品,但是没有现成的驱动,想自己写驱动,就可以参考这个格式来实现,或者验证已有实现。
主要关注:address,启停标识,读写时序的对齐:
以下是来源于一款iic产品,但其iic标准格式代表了大部分的iic产品数据格式。
所以如果你拿到一款iic产品,但是没有现成的驱动,想自己写驱动,就可以参考这个格式来实现,或者验证已有实现。
主要关注:address,启停标识,读写时序的对齐:
eg:
docker container update --restart=always 容器名字
注意,重启docker很重要,否则修改完的配置文件,重启容器后会被还原
在docker中启用systemd时,过程中出现:
Failed to get D-Bus connection: Operation not permitted
systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!
添加授权:
docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
增加授权会提高风险,需要仔细评估具体的运行脚本和命令,避免对宿主造成安全风险
letsencrypt 过程中出现:
Challenge failed for domain xxx 的错误
经过搜索和分析,发现是:
验证证书的过程是走http的80端口,而我因为不用80,所以没有开放80导致。
根据Walsh所说,容器中没有systemd最大的问题是它“退回到了使用初始化脚本之前。”每个镜像作者都在容器内创建自己的疯狂的启动脚本,而不是使用软件包作者精心制作的启动脚本。他演示了在具有systemd的容器内,服务初始化是何尝的简单,创建一个运行Apache httpd服务器的容器,其Dockerfile只有三行:
FROM fedora
RUN yum -y install httpd; yum clean all; systemctl enable httpd;
CMD [ "/sbin/init" ]
参考:
1. https://lwn.net/Articles/676831/ http://dockone.io/article/1093 (翻译)
因为想要做多个域名cname到同一页面,所以不能用https,只能用http,但是发现在chrome和火狐中怎么也不成功,只有ie可以。反复验证和排查网站设置都无果,同样chrome访问别的http域名也是可以的,并不是所有的都不行,但是我的就是不行。后面通过搜索大概发现了问题的线索:https://stackoverflow.com/questions/50258202/how-does-google-force-https-on-their-app-tld
因为我弄的正好是app后缀的域名,所以无论如何尝试,chrome和火狐都会自己跳转到https,而我没有部署证书,导致无法正常显示。
所以这个问题基本是无望了,只能取消多域名cname同一个页面的想法了,为每一个域名实现独立的https页面了。
网上有很多文章,如果你简单照着配置,大概率是不行的,因为每个人的软件和系统环境都有所差异,所以本文不是告诉你一步一步怎么配置,而是把过程中的要点记录下来,便于排查问题。
我们也称为虚拟用户的宿主用户,这里我们一般建议直接使用ftp账户:
ftp:x:104:107:ftp daemon,,,:/srv/ftp:/bin/false
guest_enable=YES
guest_username=ftp
一般我们使用虚拟用户,每个虚拟用户都配置成拥有自己专有的目录和权限。目录配置如下:
user_config_dir=/etc/vsftpd/vusers
user_sub_token=$USER
local_root=/home/virtual/$USER
经过实际验证,主要是配置anon_umask来控制文件权限,通过anon_xxx来配置动作行为。
网上的文章大部分是基于db4工具db_load 下的pam_userdb.so 的pam配置,并没全场景通过,有待后继进一步确认。在实际的验证中,测试实际通过使用的的是pwdfile库:
auth required pam_pwdfile.so pwdfile /etc/vsftpd/vsftpd.passwd
account required pam_permit.so
这个库的对应账号数据不是通过db_load,而是openssl工具:
openssl passwd -1 "$VSFTPD_USER_PASS"
经过配置,如果你发现,所有的账户还是不能达到预期的权限控制和可达性,请结合 anon_umask 来确认用户的chroot 目录及所操作文件的实际权限
需要进行相应的ftp权限配置,或者关闭
### # Config file for vsftpd ### # Daemon options listen=YES listen_ipv6=NO session_support=NO # Log In Options and Access Controls anonymous_enable=YES anon_root=/home/virtual/share ftpd_banner=Wellcom to iTransCloud ftp server! local_enable=YES # pam pam_service_name=vsftpd # Local User Options chmod_enable=YES chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty guest_enable=YES guest_username=ftp local_umask=0022 anon_umask=0222 user_config_dir=/etc/vsftpd/vusers user_sub_token=$USER local_root=/home/virtual/$USER # ascii ascii_upload_enable=YES ascii_download_enable=YES # Directory Options dirlist_enable=YES dirmessage_enable=NO force_dot_files=NO hide_ids=NO ls_recurse_enable=NO use_localtime=YES # File Transfer Options download_enable=YES chown_uploads=NO write_enable=YES # Logging Options dual_log_enable=NO log_ftp_protocol=NO syslog_enable=NO vsftpd_log_file=/var/log/vsftpd/vsftpd.log xferlog_enable=YES xferlog_std_format=NO # Network Options connect_from_port_20=YES listen_port=21 pasv_enable=YES pasv_address=changeme pasv_min_port=changeme pasv_max_port=changeme pasv_promiscuous=NO port_enable=YES # Connection Options tcp_wrappers=YES max_clients=10 max_per_ip=5 max_login_fails=3 # Tweak seccomp_sandbox=NO allow_writeable_chroot=YES
这里给出的是一个读写全权限的配置,其他组合自行修改
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_umask=0022
在支持虚拟用户的支持,是可以实现支持匿名访问的,实现的要点也是,关注配置和被访问文件夹以及被访问文件的权限设置,设置正确,就可以支持了。
同样的测试内容:chabctimes
在centos7下面:
# echo "chabctimes"|base64
Y2hhYmN0aW1lcwo=
在线测试平台 https://tool.oschina.net/encrypt?type=3 测试如下:
Y2hhYmN0aW1lcw==
根据第三方的验证,下面的内容是通过验证可以正常用的,上面的不行。从对比看,下面跟上面的结果比较,末尾倒数第2个字符一个是=一个是o
一阵g搜索,再结合只有尾部一个字符差异,而且所有内容都是倒数第二个差异,所以初步猜测可能是尾部回车换行的差异导致。
经过不同内容的验证,基本确认以上的猜测:在linux环境下echo命令行的模式,比在线的方式多一个尾部的回车换行。
再就回车换行问题进一步进行确认,因为是1个字符也会多回车换行,还不是经典的76字符回车换行问题,所以怀疑是echo的问题,经搜索,确认是echo的问题。
在echo中增加参数-n 去掉结尾回车换行,验证OK:
echo -n "chabctimes"|base64
###下载安装文件
wget http://www.privoxy.org/sf-download-mirror/Sources/3.0.26%20%28stable%29/privoxy-3.0.26-stable-src.tar.gz
tar -zxvf privoxy-3.0.26-stable-src.tar.gz
cd privoxy-3.0.26-stable
privoxy-3.0.26-stable 是目前最新的稳定版,建议在下载前去 Privoxy 官网下载页 检查一下版本。
Privoxy 强烈不建议使用 root 用户运行,所以我们使用 useradd privoxy 新建一个用户.
autoheader && autoconf
./configure
make && make install
```vi /usr/local/etc/privoxy/config```
找到以下两句,确保没有注释掉
listen-address 127.0.0.1:8118 # 8118 是默认端口,不用改,下面会用到
forward-socks5t / 127.0.0.1:0 . # 这里的端口写 shadowsocks 的本地端口(注意最后那个 . 不要漏了)
privoxy --user privoxy /usr/local/etc/privoxy/config
配置 /etc/profile
vi /etc/profile
添加下面两句:
export http_proxy=http://127.0.0.1:8118 #这里的端口和上面 privoxy 中的保持一致
export https_proxy=http://127.0.0.1:8118
运行以下:
source /etc/profile
curl www.google.com
返回一大堆 HTML 则说明 shadowsocks 正常工作了。
download yum repo on Fedora Copr and put it inside /etc/yum.repos.d/. The release Epel is for RHEL and its derivatives.
Then, install shadowsocks-libev via dnf:
su -c 'dnf update'
su -c 'dnf install shadowsocks-libev'
shadowsocks-libev 默认读取位于 /etc/shadowsocks-libev/config.json 的配置文件,我们可以根据需要参考以下配置文件进行修改:
{
"server": "example.zzz.buzz",
"server_port": 10443,
"local_port": 1080,
"password": "zzz.buzz",
"method": "aes-256-cfb",
"mode": "tcp_and_udp",
"timeout": 600
}
"server": 必填,填入要连接的 shadowsocks 服务器域名或 IP。
"server_port": 必填,填入服务器上 shadowsocks 所监听的端口。
"local_port": 必填,填入本地 shadowsocks 客户端 SOCKS5 代理要监听的端口。
"password": 必填,密码,需与 shadowsocks 服务器端配置一致。
"method": 必填,加密方法,需与 shadowsocks 服务器端配置一致。
"mode": 选填,默认 "tcp_only"。
shadowsocks 所要监听的协议,可填 "tcp_only", "udp_only" 和 "tcp_and_udp"。
填入 "tcp_and_udp" 相当于命令行上提供 -u 参数;填入 "udp_only" 相当于命令行上提供 -U 参数。
"timeout": 选填,不活动连接的保持时间。
默认 60 秒,设置较长时间有助于保持 HTTP 长连接等。设置时间过长则会导致不必要地占用过多 shadowsocks 服务器资源。
对于配置客户端,完成以上几项配置就足够了。
如果想要变更默认的配置文件,或者提供其他命令行参数,我们可以修改 /etc/sysconfig/shadowsocks-libev:
# Configuration file
CONFFILE="/etc/shadowsocks-libev/config.json"
# Extra command line arguments
DAEMON_ARGS="-u"
其中 CONFFILE 指定了 shadowsocks-libev 所读取的配置文件;DAEMON_ARGS 则指定了额外的命令行参数,此处的 "-u" 表示启用 UDP 协议。
需要注意的是,命令行参数 DAEMON_ARGS 比配置文件 CONFFILE 中指定的选项优先级要更高一些。
systemctl enable --now shadowsocks-libev-local