東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

微服务环境搭建之centos7

2022年9月1日星期四



4台笔记本升级到32G内存。。。。全部刷成CentOS7,用来当服务器。

两台E580发现无法获取无线网卡,插上网线也无法获取ip

1,解决无法获取IP问题

[senrsl@SENRSL04 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether e8:6a:64:b1:91:14 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.140/24 brd 192.168.0.255 scope global noprefixroute dynamic enp3s0
       valid_lft 86232sec preferred_lft 86232sec
    inet6 2409:8a3c:53d:4b4f:4c8:8e31:2972:7673/64 scope global noprefixroute dynamic
       valid_lft 595sec preferred_lft 595sec
    inet6 fe80::ff94:8f0d:529b:84ae/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[senrsl@SENRSL04 ~]$ cat /etc/sysconfig/network-scripts/ifcfg-enp3s0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp3s0
UUID=95bcdb88-6549-45c0-9a46-6147822784fd
DEVICE=enp3s0
ONBOOT=yes
[senrsl@SENRSL04 ~]$ service network restart

文件中,将ONBOOT由no改为yes,然后重启网络服务即可取到ip

2, 无线网卡驱动

安装lspci

[root@SENRSL04 senrsl]# yum whatprovides */lspci

[root@SENRSL04 senrsl]# yum install pciutils

查看网卡

[root@SENRSL04 senrsl]# lspci -nn | grep -i net
03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 10)
05:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8821CE 802.11ac PCIe Wireless Network Adapter [10ec:c821]
[root@SENRSL04 senrsl]#

centos7内核3.几,无线网卡升级内核到4.几,还要自己编译驱动。。。。

换了个centos8也不行。。。。

1)升级内核

uname -r #查看当前内核版本

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #导入该源的秘钥

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm #启用该源仓库

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available #查看有哪些内核版本可供安装,可省略直接安装最新的

yum --enablerepo=elrepo-kernel install kernel-lt -y #安装的长期稳定版本(后缀lt),稳定可靠


2)修改开机默认内核

[root@SENRSL04 senrsl]# vi /etc/default/grub

修改 GRUB_DEFAULT=0

[root@SENRSL04 senrsl]# grub2-mkconfig -o /boot/grub2/grub.cfg //修改生效

reboot 重启,进新内核系统

2.1)you need to load kernel first,invalid signature

BIOS里关闭安全引导 Secure Boot.

3)升级内核有线网卡也没了

为了无线网卡升级内核,升级内核后有线网卡也没了。。。。

重新加载r8169驱动,执行

rmmod r8169

modprobe r8169

systemctl restart network

有线网卡回来了。。。。

4)刷新缓存

[root@SENRSL04 senrsl]# yum clean all && yum makecache

[root@SENRSL04 senrsl]# yum -y update

5)下载必要kernel头文件

[root@SENRSL04 senrsl]# uname -a
Linux SENRSL04 5.4.207-1.el7.elrepo.x86_64 #1 SMP Tue Jul 19 10:40:55 EDT 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@SENRSL04 senrsl]# yum install https://mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.207-1.el7.elrepo.x86_64.rpm

[root@SENRSL04 senrsl]# yum install https://mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.207-1.el7.elrepo.x86_64.rpm

6)升级编译工具

# 安装centos-release-scl
yum install centos-release-scl

# 安装devtoolset,注意,如果想安装7.*版本的,就改成devtoolset-7-gcc*,以此类推
yum install devtoolset-8-gcc*

# 激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-8 bash

# 大功告成,查看一下gcc版本
gcc -v

# 切换版本
source /opt/rh/devtoolset-8/enable


[root@SENRSL04 senrsl]# gcc -v
。。。。
gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
[root@SENRSL04 senrsl]# g++ -v
。。。。
gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
[root@SENRSL04 senrsl]#

7)编译驱动安装

# 查看网卡型号
/sbin/lspci | grep Network
# github源码
https://github.com/tomaspinho/rtl8821ce
make
make install 
# 重启
reboot

重启

8)连接wifi

重启后,ip a查看是否有了无线网卡

[root@SENRSL03 senrsl]# nmcli dev wifi
IN-USE  SSID          MODE   CHAN  RATE        SIGNAL  BARS  SECURITY 
        SENRSL24      Infra  11    270 Mbit/s  100     ▂▄▆█  WPA2     
        SENRSL        Infra  36    540 Mbit/s  100     ▂▄▆█  WPA1 WPA2
        SENRSL50      Infra  36    270 Mbit/s  100     ▂▄▆█  WPA2     
        SENRSL        Infra  11    540 Mbit/s  94      ▂▄▆█  WPA1 WPA2

[root@SENRSL04 senrsl]# nmcli dev wifi connect "SENRSL24" password "密码" wep-key-type key ifname wlp5s0

然后继续查看wifi是否获取了IP地址。。。。

3, mac烧录镜像

SENRSL:Downloads senrsl$ diskutil list  //找到目标U盘

/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.0 GB     disk4
   1:             Windows_FAT_32 ⁨WIN7X64⁩                 4.0 GB     disk4s4

SENRSL:Downloads senrsl$ diskutil unmountDisk /dev/disk4 //取消U盘挂载
Unmount of all volumes on disk4 was successful
SENRSL:Downloads senrsl$ sudo dd if=CentOS-Stream-
CentOS-Stream-8-x86_64-20220719-boot.iso  CentOS-Stream-9-latest-aarch64-dvd1.iso  
SENRSL:Downloads senrsl$ sudo dd if=CentOS-Stream-8-x86_64-20220719-boot.iso of=/dev/disk4 bs=1m  //烧录镜像
Password:
863+0 records in
863+0 records out
904921088 bytes transferred in 220.441731 secs (4105035 bytes/sec)
SENRSL:Downloads senrsl$ diskutil eject /dev/disk4    //弹出磁盘
Disk /dev/disk4 ejected
SENRSL:Downloads senrsl$

4,合盖不休眠

[root@SENRSL01 senrsl]# vi /etc/systemd/logind.conf
[root@SENRSL01 senrsl]# systemctl restart systemd-logind
[root@SENRSL01 senrsl]#

修改文件中 HandleLidSwitch=lock

解释:

ignore: 忽略,跳过power off:
关机eboot:
重启halt:
挂起suspend  shell内建指令,可暂停目前正在执行的shell。若要恢复,则必须使用SIGCONT信息。所有的进程都会暂停,但不是消失(halt是进程关闭)
hibernate: 让笔记本进入休眠状态
hybrid-sleep: 混合睡眠,主要是为台式机设计的,是睡眠和休眠的结合体,当你选择Hybird时,系统会像休眠一样把内存里的数据从头到尾复制到硬盘里 ,然后进入睡眠状态,即内存和CPU还是活动的,其他设置不活动,这样你想用电脑时就可以快速恢复到之前的状态了,笔记本一般不用这个功能。
lock: 仅锁屏,计算机继续工作。

5,clash

走docker

[root@SENRSL03 docker]# docker pull dreamacro/clash

[root@SENRSL03 docker]# docker run -d --name clash --restart always -p 7890:7890 -p 7891:7891 -p 9090:9090  -v /home/senrsl/docker/subcon3ui.yaml:/root/.config/clash/config.yaml -v /home/senrsl/docker/yacd:/ui  dreamacro/clash 

其中subcon3ui.yaml延用之前subcon3.yaml,修改头

port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090
external-ui: /ui
proxies:

对外rest接口9090,dashboard路径/ui

访问 http://192.168.0.141:9090/ui  即可查看

6,代理

路由器老了,扛不住了。。。。

export https_proxy=http://192.168.0.141:7890 http_proxy=http://192.168.0.141:7890 all_proxy=socks5://192.168.0.141:7890

7,centos开放端口

[root@SENRSL04 senrsl]# firewall-cmd --get-active-zones  //查看zone
public
  interfaces: wlp5s0
[root@SENRSL04 senrsl]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@SENRSL04 senrsl]# firewall-cmd --reload
success
[root@SENRSL04 senrsl]# firewall-cmd --query-port=6379/tcp
yes


8,redis其他设备访问

 Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

如上所示,可以在redis-cli里CONFIG SET protected-mode no

或者设置外部绑定地址

9,which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by] with root cause

SQL 标准中不允许 SELECT 列表,HAVING 条件语句,或 ORDER BY 语句中出现 GROUP BY 中未列表的可聚合列。而 MySQL 中有一个状态 ONLY_FULL_GROUP_BY 来标识是否遵从这一标准,默认为开启状态。

查询

mysql> select @@GLOBAL.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode                                                                                                                         |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.37    |
+-----------+
1 row in set (0.01 sec)

mysql>

可以在库中修改,也可以直接修改配置文件更省事

[root@SENRSL02 senrsl]# vi /etc/my.cnf

[mysqld]
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

改完后重启服务即可。

10,Uncaught DOMException: Blocked a frame with origin "http://test.com:9200" from accessing a cross-origin frame.

html间跨域问题。。。。

9100是主页面,穿插9200的页面。

1)父页面取子页面

子页面发送

    window.parent.postMessage("close_layer",'*'); //第一个参数是ev.data,第二个参数是网址目标

父页面取

window.addEventListener('message',function(e){

    alert(e.data);

       window.did = e.data[0];
       window.title = e.data[1];

   },false);

或者

window.addEventListener('close_layer',function (ev) {  //message是个固定类型,不能写close_layer。。。。找一晚上,屮
    layer.close(loadingIndex);
})

2)子页面取父页面

父页面发送

var frame = document.getElementById('layui-layer-iframe'+index);
frame.contentWindow. postMessage (userIds, '*');

子页面获取

    var userIds;
    window.addEventListener('message',function (ev) {
        if (ev.origin !== "http://test.com:9100") return;
        console.log(ev.data+"   ");
        userIds = ev.data;
    },false)

千万不要去打印frame.contentWindow,会一直报跨域,但是可以直接用。。。。

11,VO、BO、PO、DO、DTO

DTO Data Transfer Object 数据传输对象

VO Value Object 值对象,用于展示的对象

PO Persistant Object 持久对象,用于数据持久化

BO Business Object 业务对象

DO Data Object 等于PO,或 Domain Object 等于BO

Entity 实体类,一个实体一张表

Pojo plian ordinary Java Object 简单无规则Java对象

DAO  Data Access Object 数据访问对象,sun的标准j2ee设计模式接口,负责持久层封装。


12,mysql主从复制错误

1)Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 1296

stop slave ;set global sql_slave_skip_counter=1;start slave;

或者配置跳过所有1032错误

my.cnf 在Replication.settings下添加 slave-skip-errors=1032


2)Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000001, end_log_pos 1603

是因为 slave上有记录,master上又插入同一条记录。

mysql> desc 表;

删除重复主键,重新start slave。

13,M1芯片SVN

SENRSL:Downloads senrsl$ brew install subversion

SENRSL:Downloads senrsl$ svn --version
svn,版本 1.14.2 (r1899510)
   编译于 Apr 13 2022,15:01:00 在 x86_64-apple-darwin21.3.0


idea报E170013

在idea setting svn配置中勾选 Enable interactive(交互) mode。


14,1129 - Host '192.168.0.141' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

重置错误记录数

mysql> flush hosts;


15,shadingsphere配置报错

No qualifying bean of type 'org.apache.shardingsphere.infra.config.mode.ModeConfiguration' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

需要配置模式 如 spring.shardingsphere.mode.type=Memory

All tables must be in the same datasource.

改用4.1.1,spring boot 5.1.2一堆坑。。。。

显示sql记录 

# 配置真实数据源
spring.shardingsphere.datasource.names=ds-user,ds-exam

# 配置第 1 个数据源
spring.shardingsphere.datasource.ds-user.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds-user.driver-class-name=com.mysql.jdbc.Driver
#spring.shardingsphere.datasource.ds-user.jdbc-url=jdbc:mysql://think.test.com:3306/mine_static_data?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.shardingsphere.datasource.ds-user.jdbc-url=jdbc:mysql://think.test.com:3306/mining_user_service?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.shardingsphere.datasource.ds-user.username=root
spring.shardingsphere.datasource.ds-user.password=012345

# 配置第 2 个数据源
spring.shardingsphere.datasource.ds-exam.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds-exam.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds-exam.jdbc-url=jdbc:mysql://think.test.com:3306/mining_exam_service?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.shardingsphere.datasource.ds-exam.username=root
spring.shardingsphere.datasource.ds-exam.password=012345

#spring.shardingsphere.props.sql.show=true

#spring.shardingsphere.mode.type=Memory

#spring.shardingsphere.sharding.tables.sys_etgroup_user.actual-data-nodes=ds-exam.sys_etgroup_user
##spring.shardingsphere.sharding.tables.sys_etgroup_user.actual-data-nodes=ds-exam.sys_etgroup_user
##spring.shardingsphere.rules.sharding.tables.et_exam_detail.actual-data-nodes=ds-exam.sys_etgroup_user
#
## 指定主键
#spring.shardingsphere.sharding.tables.sys_etgroup_user.key-generator.column=id
##生成策略  SNOWFLAKE 基于雪花算法,随机生成唯一的数字
#spring.shardingsphere.sharding.tables.sys_etgroup_user.key-generator.type=SNOWFLAKE
#
## 指定分片策略    以user_id主键分片
#spring.shardingsphere.sharding.tables.sys_etgroup_user.table-strategy.inline.sharding-column=id
##现在我们只有一个库,就直接写t_user表即可,不用写规则
#spring.shardingsphere.sharding.tables.sys_etgroup_user.table-strategy.inline.algorithm-expression=sys_etgroup_user
#
## 默认数据源,未分片的表默认执行库
spring.shardingsphere.sharding.default-data-source-name=ds-user
#
#
#
#spring.main.allow-bean-definition-overriding=true

#sharding-jdbc 分片策略
#=================================数据源配置部分========================================
#数据源名称,多数据源以逗号分隔
#spring.shardingsphere.datasource.names=ds0,ds1,ds2
#配置 ds0 ds1数据源具体内容

#=================================数据节点配置部分======================================
#配置course表在数据库上的信息,在那些数据库里,以及库中的分表情况(tables 后面的course可以随便取名代表后面的匹配表)
#spring.shardingsphere.sharding.tables.course.actual-data-nodes=ds$->{0..1}.course_$->{1..2}
#spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds$->{2}.t_user
spring.shardingsphere.sharding.tables.sys_etgroup_user.actual-data-nodes=ds-exam.sys_etgroup_user

#=================================数据库分库策略=======================================
# 配置默认的水平分库的策略 使用 user_id字段进行判断
#spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column=user_id
#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
#数据库策略
spring.shardingsphere.sharding.tables.sys_etgroup_user.database-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.sys_etgroup_user.database-strategy.inline.algorithm-expression=ds-exam
## 配置course表的分库策略
#spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id
#spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=ds$->{user_id % 2}

#=================================数据库分表策略========================================
#指定分片策略 约定cid值偶数添加到couse_1表,奇数添加到course_2表上
#spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
#spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{cid % 2 +1}
#表策略table-strategy
spring.shardingsphere.sharding.tables.sys_etgroup_user.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.sys_etgroup_user.table-strategy.inline.algorithm-expression=sys_etgroup_user

#==================================数据库字段生成策略====================================
###单表的水平拆分配置 指定course表里面主键cid的生成策略 SNOWFKAKE 雪花算法
#spring.shardingsphere.sharding.tables.course.key-generator.column=cid
#spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE
#字段生成策略key-generator
#spring.shardingsphere.sharding.tables.sys_etgroup_user.key-generator.column=id
#spring.shardingsphere.sharding.tables.sys_etgroup_user.key-generator.type=SNOWFLAKE

#==================================其他配置=============================================
#解决报错 Consider renaming one of the beans or enabling overriding...
spring.main.allow-bean-definition-overriding=true
#打开sql日志输出
spring.shardingsphere.props.sql.show=true


16,mysql 1067 - Invalid default value for 'create_time'

mysql 5.6以后timestamp默认是不能用 0000-00-00 00:00:00

继续修改my.cnf,把sql_mode去掉 NO_ZERO_IN_DATE,NO_ZERO_DATE:


17, READONLY You can't write against a read only replica.

连接到了Redis的从节点,只能读不能写。

18,docker命令

// 启动
systemctl start docker
// 停止
systemctl stop docker
// 重启
systemctl restart docker
// 设置开机启动
systemctl enable docker
// 查看docker状态
systemctl status docker
// 查看docker内容器的运行状态
docker stats
// 查看docker概要信息
docker info


//生成镜像,并挂载映射目录

docker build -t user-module .

docker run -dit -v /home/senrsl/docker/files:/CloudPlatform --add-host=think.test.com:192.168.0.132 -p 9100:9100 --name user-module user-module:latest

docker build -t app .

docker run -dit -v /root/files:/files -p 9100:9100 --name app app:latest


19,Centos 禁用ipv6

[root@imcp2 ~]# vi /etc/sysctl.conf

文件添加 net.ipv6.conf.all.disable_ipv6 = 1

[root@imcp2 ~]# sysctl -p /etc/sysctl.conf


20,阿里云内网 访问外网

服务器A能连往外,B不能连外网,B通过A来做跳转

A:

[root@imcp ~]# vi /etc/sysctl.conf

//增加 net.ipv4.ip_forward = 1

[root@imcp ~]# sysctl -p   //重新加载配置生效

[root@imcp ~]# cat /proc/sys/net/ipv4/ip_forward  //确认生效
1
[root@imcp ~]# iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j MASQUERADE   //设置路由 172.16为内网网段
[root@imcp ~]#

B:

专有网络,配置路由表,添加自定义路由表 

https://vpc.console.aliyun.com/vpc/cn-beijing/route-tables/vtb-xxxxxx?type=routeTable

目标网段 0.0.0.0/0

下一跳 ECS实例

ECS实例,选择 A服务器。


在B中测试,ping百度,通了。。。。


21,阿里云安全组内网互通

https://help.aliyun.com/document_detail/25475.html

同一账号,同一地域,同一安全组,内网互通,否则默认不互通。

要想实现 同一账号,同一地域,不同安全组互通,可以考虑

方案1,把ECS放到相同的安全组中,就可以互通。

方案2,不在同一安全组,两个安全组内网授权安全组访问规则,在授权对象中添加对方IP即可。

不过好像不用,想要实现的是访问另一个网络下的数据库,不过数据库可以对外访问,不用走内网。


22,scp推送文件夹

[root@imcp ~]# scp -r user/ root@172.16.0.1:/root/user/


23,Redis NOAUTH Authentication required.

阿里云建的Redis默认有密码。需要在 实例信息 - 连接信息右侧设置免密访问。


24,docker 禁用ipv6

需要先centos禁用ipv6,然后重启docker服务。。。。

[root@imcp3 exam]# vi /etc/sysctl.conf

增加

    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1

[root@imcp3 exam]# sysctl -p

[root@imcp3 exam]# systemctl restart docker

25,docker tomcat

不自动打包,挂载

docker run -dit -v /root/bk:/usr/local/tomcat/webapps/ROOT -p 8080:8080 --name tomcat tomcat:latest


26,gradlew打包apk报错 invalid format

A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable

用idea 2022版生成的keystore有这个问题,用idea2018生成的keystore就正常。。。。


27,centos7修改默认启动内核

[root@SENRSL03 senrsl]# cat /boot/grub2/grub.cfg |grep menuentry
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (5.4.207-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-5.4.207-1.el7.elrepo.x86_64-advanced-c50f9822-d85b-4447-9a09-f7f62cea6b3f' {
menuentry 'CentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.71.1.el7.x86_64-advanced-c50f9822-d85b-4447-9a09-f7f62cea6b3f' {
menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-c50f9822-d85b-4447-9a09-f7f62cea6b3f' {
menuentry 'CentOS Linux (0-rescue-5d43accc599347f6a5169a3afaaab7be) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-5d43accc599347f6a5169a3afaaab7be-advanced-c50f9822-d85b-4447-9a09-f7f62cea6b3f' {
[root@SENRSL03 senrsl]# grub2-editenv list  //当前默认启动内核
saved_entry=CentOS Linux (3.10.0-1160.71.1.el7.x86_64) 7 (Core)
[root@SENRSL03 senrsl]# uname -r    //当前使用内核
5.4.207-1.el7.elrepo.x86_64
[root@SENRSL03 senrsl]# grub2-set-default 'CentOS Linux (5.4.207-1.el7.elrepo.x86_64) 7 (Core)'  //设置默认内核
[root@SENRSL03 senrsl]# reboot

一台电脑可以。另一台不行。。。。


28,NetworkManager开机启动

启动:systemctl start NetworkManger
关闭:systemctl stop NetworkManager
开机启动:systemctl enable NetworkManager
查看是否开机启动:systemctl is-enabled NetworkManager
禁用开机启动:systemctl disable NetworkManager

29,centos网速测试

使用speedtest脚本

[root@SENRSL02 speedtest]# wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
[root@SENRSL02 speedtest]# chmod +x speedtest.py
[root@SENRSL02 speedtest]# ./speedtest.py
Retrieving speedtest.net configuration...
Testing from China Mobile (112.38.222.218)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by China Telecom TianJin (TianJin) [262.09 km]: 42.961 ms
Testing download speed................................................................................
Download: 18.30 Mbit/s
Testing upload speed................................................................................................
Upload: 51.31 Mbit/s
[root@SENRSL02 speedtest]#


30,docker旁路由

垃圾路由,连sock5都扛不住了。。。。

只好加个旁路由,主路由网关指向。。。。

1)拉取镜像

[root@SENRSL04 senrsl]# docker pull sulinggg/openwrt:x86_64

2)混杂模式,虚拟网卡

[root@SENRSL04 senrsl]# ip link set wlp5s0 promisc on
[root@SENRSL04 senrsl]# ip a

。。。
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether e8:6a:64:b1:91:14 brd ff:ff:ff:ff:ff:ff
3: wlp5s0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether f8:a2:d6:d9:92:8b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.134/24 brd 192.168.0.255 scope global noprefixroute dynamic wlp5s0
       valid_lft 51704sec preferred_lft 51704sec
    inet6 fe80::af3:bf2e:c147:9ff6/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
。。。

多了一个 promisc


永久开启混杂模式

重启后也要生效

root@SENRSL04 senrsl]# vi /etc/rc.local

末尾添加  ip link set wlp5s0 promisc on

3)创建docker虚拟网络

[root@SENRSL04 senrsl]# docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=wlp5s0 macnet
75ab05c310a99d230f597ed2740c2b2e8442ad4c48ad7ab83e906153f37e344b
[root@SENRSL04 senrsl]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
af1c83c4b487   bridge    bridge    local
ac7ead3e0385   host      host      local
75ab05c310a9   macnet    macvlan   local
1f13e55f075e   none      null      local
[root@SENRSL04 senrsl]#

创建一个 macvlan模式模式的虚拟网卡,基于wlp5s0,名称为macnet


4)使用虚拟网卡运行openwrt容器

[root@SENRSL04 senrsl]# docker run --restart always --name openwrt -d --network macnet --privileged sulinggg/openwrt:x86_64 /sbin/init
9ac4a4d82a743c81bfeeae5d12c828bc8ae93577e93ceb7518e9e042d4140b27
[root@SENRSL04 senrsl]#

其中privileged参数为 定义容器在特权模式下

5)修改配置

[root@SENRSL04 senrsl]# docker exec -it openwrt bash

bash-5.1# vi /etc/config/network

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.0.100'
        option gateway '192.168.0.1'
        option dns '192.168.0.1'

bash-5.1# /etc/init.d/network restart

重启后,主路由看到日志

Aug 23 19:45:57 bwmon[4360]: UNKNOW join your network: IP: 192.168.0.100, MAC: f8:a2:d6:d9:92:8b!
Aug 23 19:46:07 bwmon[4360]: Found new hostname:OPENWRT IP:192.168.0.100

然后看设备列表里 多了一个OPENWRT

6)访问

此时,访问 http://192.168.0.100/ 打开了旁路由管理页面  root/password

7)关闭DHCP服务

openwrt里  网络 ->接口 -> lan ->修改 勾选 忽略此接口,不在此接口提供DHCP服务。保存并应用

8)主路由

先用手机设置静态ip及网关,测试网络通常后再配置到主路由。。。。

设置主路由DHCP默认网关和DNS服务器设置为192.168.0.100

9)断开设备连接,重新连接主路由

自动获取网关变成了0.100,不再是0.1了

10)结果

特么的整了一晚上,docker宿主机可以上网,docker内也能上网。局域网内设备不能上网。。。。

搜Google,各种bug各种原因都有。。。。


31,clash 透明代理

退而求其次。。。。

tun + dns设置。。。。

[root@SENRSL04 docker]# gzip -f clash-linux-amd64-2022.07.07.gz -d

[root@SENRSL04 docker]# chmod +x clash-linux-amd64-2022.07.07

[root@SENRSL04 docker]# ./clash-linux-amd64-2022.07.07
INFO[0000] Can't find config, create a initial config file
INFO[0000] Can't find MMDB, start download              
INFO[0134] Mixed(http+socks) proxy listening at: 127.0.0.1:7890
[root@SENRSL04 senrsl]# ll ~/.config/clash/
cache.db      config.yaml   Country.mmdb 

[root@SENRSL04 docker]# ./clash-linux-amd64-2022.07.07

算了。。。。

32,git 中文文件名

SENRSL:bkzy senrsl$ git config --global core.quotepath false
SENRSL:bkzy senrsl$ git s

对0x80以上字符进行quote,关闭即可中文正常

33,nacos docker 本地mysql

分拆


34,docker 不同平台使用manifest方式

先上传 amd64及arm64平台tag

[root@SENRSL01 sentinel]# docker push dcjz/sentinel:1.8.4amd64

SENRSL:sentinel senrsl$ docker tag sentinel:latest dcjz/sentinel:1.8.4arm64

创建新的manifest,包含上面两个

SENRSL:sentinel senrsl$ docker manifest create --insecure dcjz/sentinel:1.8.4 dcjz/sentinel:1.8.4amd64 dcjz/sentinel:1.8.4arm64
Created manifest list docker.io/dcjz/sentinel:1.8.4
SENRSL:sentinel senrsl$

指明架构对应镜像

SENRSL:sentinel senrsl$ docker manifest annotate dcjz/sentinel:1.8.4 dcjz/sentinel:1.8.4amd64 --os linux --arch amd64
SENRSL:sentinel senrsl$ docker manifest annotate dcjz/sentinel:1.8.4 dcjz/sentinel:1.8.4arm64 --os linux --arch arm64

上传

SENRSL:sentinel senrsl$ docker manifest push --insecure dcjz/sentinel:1.8.4
sha256:adb2cc4fb77d5f361880aa239e9468127156b9c28bca0bce3d352f72284b51d2
SENRSL:sentinel senrsl$

有个buildX工具,看起来会更省事一些。。。。

35,centos7 安装jdk1.8

[root@SENRSL01 senrsl]# yum search java | grep jdk

[root@SENRSL01 senrsl]# yum install -y java-1.8.0-openjdk

[root@SENRSL01 senrsl]# java -version
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
[root@SENRSL01 senrsl]#

--
senRsl
2022年07月23日17:25:52

没有评论 :

发表评论