无名樵夫

一个程序员的博客, java, docker, linux 等等 (有名万物之始 无名万物之母)

avatar
  • Main
  • About
  • Archive
OpenWtr 配置

公司有几个闲置的树莓派 Raspberry PI 3B v1.2 于是想做一个wifi路由器,可以愉快的刷手机。

尝试了两个版本: openwrt-19.07.4, openwrt-23.05.0 。

根据这两个文章配置

  1. 树莓派实现OpenWrt的工作模式
  2. 树莓派WAN、LAN、WIFI接口配置

简要说明:

  1. /etc/config/network 文件配置管理IP地址, 默认192.168.1.1, 重启网络使用命令 /etc/init.d/network restart
  2. 其他常用配置也在 /etc/config/ 文件夹下面,重启命令 /etc/init.d/ 文件夹下,高版本支持 service <name> <to-do> 命令
  3. web界面,直接启用 Network > Wireless 下的 OpenWrt 热点,即可以旁路由的方式启动。
  4. 如果想wifi在不同的网段则使用第二篇文章的说明,关键点是:
    1. 默认的LAN接口中不使用 eth0 的物理设备。在 19.07.4 去掉 eth0 设备,23.05.0 设置为 wlan0 热点对应的设备,23.05.0 注意设置正确的网关。
    2. 添加新的接口 wan ,使用 eth0 的物理设备,防火墙使用 wan,wan的防火墙建议将 input 设置为 accept,这样电脑端可以根据eth0的ip访问web界面,否则apply后需要先连接到 wifi 再根据自己的配置重新进入 web 界面。
<完>
01 1, 2024 阅读全文...
Jenkins 集群配置

今天做了个 jenkins 集群配置。碰的问题多多啊。jenkins 集群只需要一个服务器安装 jenkins 就好了. 其他服务器 jenkins 自动通过 ssh 登录去运行,基础环境还是必须的,例如:java 必须安装,如果必要 git,maven 也同样需要, 如果是手动指定的安装目录,所有机器的安装目录应该相同.(不同可以 ln -s 一个)

我的环境:两台服务器 Serve1, Serve2,

Server1 中使用 podman 跑Jenkins 2.346.3(当时java1.8可用的最高版本),
Server2 中podman 跑 JDK11(自己安装的openssh-server,版本是 eclipse-temurin:11-jdk-jammy)

集群配置配置步骤:

  1. Manage Jenkins » Manage Nodes and Clouds » New node (name,Permanent Agent)
  2. Launch method 选项 Launch agents via SSH
    A. 该选项不存在: 安装插件 SSH Agent Plugin和SSH Build Agents
    B. 我Jenkins版本太低导致不可用,还无法卸载差距,只能手动删文件,根据插件信息下载适合的版本,然后删除插件文件和文件夹(默认 /var/jenkins_home/plugin) ssh-slaves,ssh-agent 对应的文件和文件夹。
    C. 注意重启 jenkins
    D. 手动上传对应版本的 插件,我的SSH Build Agents v-1.834…, 默认是 2.xxxx 的。
    E. 配置SSH 出错 Key exchange was not finished, connection is closed., 选择 Host Key Verification Strategy 选项: Non...
  3. 如果集群安装成功,则配置每个 job 的时候,会多一个选项 Restrict where this project can be run.
  4. 默认还是使用的 jenkins 所在的主机进行构建,这时候需要在 job的配置选择 Execute concurrent builds if necessary 允许并发构建,同时点击多次构建会在不同的主机上同时进行构建。
<完>
11 28, 2023 阅读全文...
podman 编译并安装为服务

使用 podman 创建的应用无法自动启动,需要安装为服务,下面的代码将编译 docker 文件,并安装服务。 普通用户 需要 systemctl –user … , root 用户则不需要.

Shell 脚本文件:deploy.sh

#!/bin/bash -ex

CURRENT=`pwd`

cd $(dirname $0)
if [ $# -lt 3 ] ; then
  echo "ERROR ERROR ERROR : $0 xxxx.jav app_config_dir deploy_name"
  exit 1;
fi

DOCKER_NAME=$3
PORT=$4

set -e

TMP=`mktemp -d /tmp/docker.deploy.XXXXXXXX`

## 
cp $CURRENT/$1 "$TMP/app.jar"
cp -r $CURRENT/$2 "$TMP/config/"
cp Dockerfile "$TMP/Dockerfile"

cd $TMP

TAG_NAME=`date +%Y%m%d-%H%M%S`
/usr/bin/podman build . -t $DOCKER_NAME:$TAG_NAME 
#/usr/bin/podman build . -t $DOCKER_NAME:latest
/usr/bin/podman tag $DOCKER_NAME:$TAG_NAME $DOCKER_NAME:latest

/usr/bin/podman ps | grep $DOCKER_NAME && /usr/bin/podman stop $DOCKER_NAME
/usr/bin/podman ps -a | grep $DOCKER_NAME && /usr/bin/podman rm $DOCKER_NAME
/usr/bin/podman run -d --net host --restart always \
                         --name $DOCKER_NAME \
                         -v /home/app/logs/$DOCKER_NAME/:/var/log/tomcat/ \
                         $DOCKER_NAME:$TAG_NAME


/usr/bin/podman generate systemd --files --name $DOCKER_NAME
sv="container-${DOCKER_NAME}.service"
if [ `id -u` == 0 ]; then
    mv -f $sv /usr/lib/systemd/system/
    systemctl daemon-reload
    systemctl enable $sv
else
    mkdir -p  ~/.config/systemd/user/
    mv -f $sv ~/.config/systemd/user/
    systemctl --user daemon-reload
    systemctl --user enable $sv
fi

cd ~
rm -rf $TMP

<完>
11 21, 2023 阅读全文...
JDK 获取 https 的服务器证书文件

JDK 获取 https 的服务器证书文件。


import java.net.URI;
import java.net.URL;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

import org.testng.annotations.Test;

@Test
public class ChunkBodyProcessorTest {

  // java 11+
  @Test
  public void multipleChunk0() throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    HttpResponse<Void> res = client.send(
        HttpRequest.newBuilder().GET().uri(URI.create("https://www.baidu.com/")).build(),
        HttpResponse.BodyHandlers.discarding());
    SSLSession ssl = res.sslSession().get();
    Certificate[] cert = ssl.getPeerCertificates();
    for (int i = 0; i < cert.length; i++) {
      if (cert[i] instanceof X509Certificate x) {
        System.out.println(x.getSubjectX500Principal().getName());
        System.out.println("\t\t" + x.getNotBefore() + " - " + x.getNotAfter());
        // xx.cer 文件, 也可以换成 64 字符一行, 开头:-----BEGIN CERTIFICATE-----\n , 结尾:-----END CERTIFICATE-----
        // System.out.println(Base64.encode(ax.getEncoded()));
      }
    }
  }

  // java 1.8+
  @Test
  public void multipleChunks() throws Exception {
    URL url = new URL("https://www.baidu.com/");
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setReadTimeout(1000);
    conn.connect();
    Certificate[] cer = conn.getServerCertificates();
    for (Certificate c : cer) {
      if (c instanceof X509Certificate ax) {
        System.out.println(ax.getSubjectX500Principal().getName());
        System.out.println("\t\t" + ax.getNotBefore() + "-" + ax.getNotAfter());
        // xx.cer 文件, 也可以换成 64 字符一行
        // System.out.println(Base64.encode(ax.getEncoded()));
      } else {
        System.out.println("Not support !!!" + c.getClass().getName());
      }
    }
  }
}

<完>
11 21, 2023 阅读全文...
vscode config gradle

Vscode 中 Gradle 的配置文件:

    // "java.jdt.ls.java.home": "D:\\Java\\...\\",
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-1.8",
            "path": "D:\\Program\\Java\\jdk1.8.0_191",
        },
    ],
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.import.gradle.java.home": "D:\\Java\\....\\",
    "java.import.gradle.wrapper.enabled": false,
    "java.import.gradle.version": "2.14.1",
    "java.import.gradle.user.home": "C:\\......\\.m2\\repository",
  1. Gradle 默认使用 java.jdt.ls.java.home 作为 jdk, 该配置用于系统的 vscode 中 java 插件的环境依赖。
  2. 所以需要指定 java.configuration.runtimes 的值来单独指定 gradle工程 需要的 JDK 版本。
  3. 可以指定Gradle 的版本 “java.import.gradle.version”: “2.14.1”, 默认回去下载Gradle的最新版本。
  4. 如果没有使用 wrapper,需要禁用: “java.import.gradle.wrapper.enabled”: false, 默认是开启的
<完>
11 14, 2023 阅读全文...
windows-server-2016 匿名共享文件夹

公司使用 windows-server-2016 需要做一个匿名的可共享的文件夹,操作如下:

  1. 启用 guest

    net user guest /active:y

  2. 仪表盘 -> 存储 -> 添加共享 为该共享文件夹 设置 Everyone 读写权限
<完>
04 10, 2023 阅读全文...
Active_Directory的 LDAP 服务

我们公司使用(windows-server-2008)Active_Directory 做域服务器来管理公司员工账号。配置了 Gitea 使用域帐号登录。

  1. Active_Directory 运行在 389 端口 (如果是SSL则在636端口)
  2. 认证类型: LDAP (via BindDN)
  3. LDAP 的结构(DN)是这样的: cn=张三,ou=技术,ou=员工,dc=you_domain,dc=com
  4. cn 是 Active_Directory 中的 name 属性,Active_Directory 管理工具显示的名字。
  5. 有个 (LDAP Browser 6.10)[https://ldapbrowserwindows.com/] 可以查看所有属性,使用任意一个可用的域账号就能访问整个域服务目录(是否有安全问题?)。
  6. Active_Directory 的账户名是 sAMAccountName 属性, email 的属性是: mail
  7. 用户过滤: (&(sAMAccountName=%s))
<完>
04 4, 2023 阅读全文...
git clone 使用非默认22端口

git 在使用 ssh,但端口不是默认 22 的时候是个很诡异的问题 每次都需要输入密码,而不是使用密钥登录 例如: git clone ssh://git@192.168.1.251:2022/changshu.li/demo.git

ssh 非22端口的时候 git clone 的地址一定要有 ssh:// 协议头部 !

解决方法是 在 .ssh/config 文件中 Host 使用个简单的别名如 gitlab,同时分别配置 Hostname 和 Port, 如下

Host gitlab
  User         git
  HostName     192.168.1.251
  Port         2022
  IdentityFile ~/.ssh/your_id_ras

然后地址 git clone ssh://git@gitlab/xxx/xxxx.git 即可,注意要有 ssh:// 协议头!

<完>
03 31, 2023 阅读全文...
将podman的容器设置为服务

podman 没有守护进程,所以 docker 的 –restart=always 参数无法时候,而且默认命令行执行的容器,退出控制台会导致运行的容器关闭。解决这个问题 podman 提供了一个生成linux服务的命令 podman generate systemd :

sudo podman generate systemd -f -n nginx   # 容器的 --name=nginx, 会生成文件 `container-nginx.service`
sudo cp container-nginx.service /usr/lib/systemd/system/
sudo systemctl enable container-nginx

卸载:

sudo systemctl disable container-nginx
sudo rm /usr/lib/systemd/system/container-nginx.service
<完>
11 8, 2022 阅读全文...
Rocky linux U 盘安装

我使用的是 大白菜U盘启动盘制作工具, 自带win7-PE 系统,可以维护或者安装windows系统,它使用的是 grub 作为启动工具。

  1. 从官网下载 rockylinux, 我的版本是 9

  2. 下载一个启动盘的编辑工具: FbinstTool , 或者自己百度一个

  3. 使用 FbinstTool 编辑启动菜单 IDBC/GRUB/TOOL.LST(该列表在启动菜单的其他工具中),添加如下内容:

     title Linux-sdb1
     root (hd0,0)
     kernel /vmlinuz boot=casper inst.repo=hd:/dev/sdb1:/ iso-scan/filename=/Rocky.iso
     initrd /initrd.img
    

    说明

    1. title 的内容可以随便填
    2. vmlinuz,initrd.img 文件是从 rockylinux.iso 中解压出来的。放在u盘的根目录,(非根可以自己修改路径,路径不要有空格)
    3. Rocky.iso 也放在根目录,文件名和路径可自行修改,(注意不要有空格)
    4. 早期版本使用 repo=xxx, 现在版本使用 inst.repo=xxx
    5. /dev/sdb1 这个路径是U盘的路径,一般U盘为所有硬盘的最后一个,如果只有一个硬盘则U盘是 /dev/sdb1,如果有两个则是 /dev/sdc1, 三个 /dev/sdd1, 一次类推,如果不清楚可以挨个尝试

注意: linux 默认是不支持 NTFS, 所以 U盘应该是 FAT32 格式(FAT32 最大支持 2G 的文件,对安装 Ghost window10 的版本都大于2G)

  1. 然后U盘启动即可!

该方法对于 ubuntu 也同样适用(使用repo=xxx, 根据日志看是否需要修改为 inst.repo=xxx)。

<完>
11 1, 2022 阅读全文...
All posts...
Powered by Jekyll · Mekyll theme 鲁ICP备18010575号