AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-583269

Rino Bino's questions

Martin Hope
Rino Bino
Asked: 2023-06-27 03:55:11 +0800 CST

确定 apt 存储库的可用架构,无需添加为源

  • 5

使用 deb (apt) 软件包存储库时,有时可以通过 http 浏览它们,以确定不同架构(amd64、arm64 等)上可用的内容。例如,Ubuntu 提供了一个文件列表来帮助浏览存储库

但是,其他来源(例如此 Elastic 存储库)不允许常规浏览。

我唯一的选择似乎是将存储库添加到我的源中(对我的系统进行修改):

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

添加后,运行apt update确认存储库提供arm64软件包(因为我在arm64主机上):

Get:7 https://artifacts.elastic.co/packages/7.x/apt stable/main arm64 Packages [78.8 kB]

但是,我想确认存储库提供的所有可用发布架构,并且我想在不必修改我的主机系统的情况下执行此操作。我怎样才能做到这一点?

在此用例中,我必须启动测试 arm64 主机才能确定软件包是否可用。我真的很想避免将来必须做此类事情,而只需远程浏览回购产品。

apt
  • 1 个回答
  • 32 Views
Martin Hope
Rino Bino
Asked: 2023-06-13 02:26:48 +0800 CST

Linux/BSD“快速”擦除驱动器?

  • 5

我正在清理一个驱动器dd。这是一个 USB 设备和 120GB,需要很长时间:

dd if=/dev/zero of=/dev/da0 bs=1M status=progress

我试过弄乱块大小(更小和更大的值bs=4M,bs=8M等等),但似乎没有什么区别。它的写作速度7000 kB/s非常慢。

我不关心“安全地”擦除数据,我只想擦除数据,这样我就可以从头开始重新建立分区结构和文件系统。是否有替代方法(使用标准实用程序)可以针对此类场景执行快速(一两分钟内)擦除?我正在使用的设备是 FreeBSD,但我认为 dd 命令(和 gpart 等)在它和 Linux 之间的工作方式类似。

filesystems
  • 3 个回答
  • 27 Views
Martin Hope
Rino Bino
Asked: 2023-02-02 15:24:28 +0800 CST

Nginx 在 if 语句之前不处理 auth_request

  • 7

通过示例展示我遇到问题的地方可能是最简单的,所以我会直接进入......

此代码段将按原样用于启用了重写/授权模块的 Nginx。所以希望这个问题在几乎所有 Nginx 安装上都能快速轻松地重现......

server {
  listen 8081;
  add_header x-user bar;
  return 200;
}

server {
  listen 8080;

  location = /auth {
    internal;
    proxy_pass http://localhost:8081;
  }

  location / {
    auth_request /auth;
    auth_request_set $foo $upstream_http_x_user;

    add_header x-test $foo;
    add_header success true;

    proxy_pass http://example.com/;
  }
}

上面的示例 Nginx 站点配置执行以下操作:

  1. /auth通过auth_request 呼叫发送任何请求
  2. /auth 位置将请求发送到添加标头的另一台服务器x-user bar
  3. auth_request_set$foo根据上面步骤 2 中设置的上游标头值设置一个新的 var x-user。
  4. 设置了一个新的标头,x-test该标头的值为$foo
  5. 请求继续到外部目的地。

响应正是我所期望的,并确认$foovar 设置正确:

$ curl -s --head http://localhost:8080 | grep -E 'HTTP|x-test'
HTTP/1.1 200 OK
x-test: bar

所以,问题来了……
我需要调整这个配置,以便在上游标头的值不正确时返回 403。

似乎是一项简单的任务。所以我添加了一个if{}条件来检查标题:

  location / {
    auth_request /auth;
    auth_request_set $foo $upstream_http_x_user;

    # this 'if' is the only part added to the original config
    if ($foo != bar) {
      return 403;
    }

    add_header x-test $foo;
    add_header success true;

    proxy_pass http://example.com/;
  }

条件if评估为真,所以我得到了 403,这不是我所期望的。所以,这不起作用:

$ curl -s --head http://localhost:8080 | grep -E 'HTTP|x-test'
HTTP/1.1 403 Forbidden

我意识到if 是邪恶的但是我似乎只是用它来返回应该没问题。我愿意使用任何方法来实现相同的目标——有或没有if,所以我对想法持开放态度!!

我试过做一些事情,比如将auth_request和/或if语句移动到块中server{},但似乎没有任何东西可以按照我期望的方式进行评估。


进一步的故障排除/详细信息:

我已经验证了问题是在isif之前对 is 进行了评估auth_request_set

  location / {
    auth_request /auth;
    auth_request_set $foo $upstream_http_x_user;

    if ($foo != bar) {
      # x-test never gets set because $foo is null when if evaluates
      add_header x-test $foo always;
      add_header success false always;
      return 403;
    }

    add_header x-test $foo;
    add_header success true;

    proxy_pass http://example.com/;
  }
$ curl -s --head http://localhost:8080 | grep -E 'HTTP|x-test|success'
HTTP/1.1 403 Forbidden
success: false

set如果使用而不是,我已经验证这不是问题auth_request_set。这有效(但没有实现目标):

  # set works, but not auth_request_set
  location / {
    set $foo bar;

    if ($foo != bar) {
      return 403;
    }

    add_header x-test $foo;
    add_header success true;

    proxy_pass http://example.com/;
  }

这个配置有效。set之前被评估if:

$ curl -s --head http://localhost:8080 | grep -E 'HTTP|x-test'
HTTP/1.1 200 OK
x-test: bar

即使在上下文auth_request中,该行为仍然存在server{}:

server {
  listen 8081;
  add_header x-user bar;
  return 200;
}

server {
  listen 8080;

  auth_request /auth;
  auth_request_set $foo $upstream_http_x_user;

  location = /auth {
    internal;
    proxy_pass http://localhost:8081;
  }

  location / {

    if ($foo != bar) {
      return 403;
    }

    add_header x-test $foo;
    add_header success true;

    proxy_pass http://example.com/;
  }

}

$ curl -s --head http://localhost:8080 | grep -E 'HTTP|x-test|success'
HTTP/1.1 403 Forbidden
success: false

我查看了以下文档和问题:

  • 在 nginx 中返回 auth_request 后,我​​可以比较 auth_request_set 设置的变量吗?
  • https://stackoverflow.com/questions/73431103/cant-access-added-headers-using-nginx-auth-request-set
  • Nginx $upsteam_cache_status 自定义标头不会出现
  • auth_request 不阻止 return 指令,不能返回状态?
  • https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil
  • http://nginx.org/en/docs/http/ngx_http_auth_request_module.html
  • http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if
  • https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
nginx
  • 2 个回答
  • 116 Views
Martin Hope
Rino Bino
Asked: 2022-10-01 13:46:05 +0800 CST

清理 Jenkins 工作区但保持 Python .venv 完整

  • 1

这个问题与在 Jenkins 管道中使用 Python + Poetry 项目以及如何保留.venv/


设想:

我有一个触发 Python 项目的 Jenkins Pipeline 作业。该项目使用诗歌在工作空间内的 .venv 中创建虚拟环境。每次后续作业运行,它将按预期重新使用 .venv ,因此每个 pip 包不需要在每次运行时重新下载(除非poetry.lock 文件中有差异)。一切都按预期工作。

我想使用 Jenkins Workspace Cleanup Plugin 对管道进行更改,我想破坏工作区文件但保留一些文件,包括 pip/poetry/venv 环境文件。这是为了允许它重新使用上一次运行中仍然存储在 .venv 中的 pip 包——就像它在今天的工作管道上一样。

完整的管道文件示例在这篇文章的底部,但这是我添加到现有管道中的 cleanWs() 部分的片段:

post {
  always {
    cleanWs(
      deleteDirs: true,
      notFailBuild: true,
      patterns: [
        [pattern: '.venv', type: 'EXCLUDE'],
        [pattern: '.venv/**', type: 'EXCLUDE']
      ]
    )
  }
}

这是问题:

  • 作业第一次运行时,它工作得非常好,工作区清理工作按预期工作。该.venv/目录按预期保留。

  • (问题)在作业的后续运行中,诗歌将重新安装所有包并且不会重新使用 .venv 目录:

    Creating virtualenv test in /data/jenkins_home/workspace/test-cleanup/.venv-- 这会强制重新下载每个包,即使.venv已经存在。在作业运行之前已确认/data/jenkins_home/workspace/test-cleanup/.venv已存在。

  • 这是奇怪的部分:如果我在 Jenkins 服务器上手动转到工作区目录并运行与预期完全相同的命令 ,它会被重用并且不会重新安装所有包。因此,它在作业中运行的处理方式有一些特定的内容,这使得它想要重新创建 .venv 目录。poetry install.venv

注意in-project = true已经为诗歌设置。所以它总是会尝试在当前工作目录中使用 .venv 。


例子:

这是一个按预期工作的简单示例管道。当poetry installstep 运行时,它不会在每次作业运行时重新下载所有包,只有第一次,或者如果有差异:

pipeline {

  agent any

  stages {

    stage("Prep Build Environment") {
      steps {

        script {
          scmVars = git branch: "main", poll: false, url: "[email protected]:my-org/private-repo.git"
        }

        sh "poetry install"
      }
    }
  }
}

这是添加的新Jenkinsfile 管道文件cleanWs()。添加后,项目将不再在每次运行时重新使用 .venv,即使它仍然存在:

pipeline {

  agent any

  stages {

    stage("Prep Build Environment") {
      steps {

        script {
          scmVars = git branch: "main", poll: false, url: "[email protected]:my-org/private-repo.git"
        }

        sh "poetry install"
      }
    }
  }

  post {
    always {
      cleanWs(
        deleteDirs: true,
        notFailBuild: true,
        patterns: [
          [pattern: '.venv', type: 'EXCLUDE'],
          [pattern: '.venv/**', type: 'EXCLUDE']
        ]
      )
    }
  }

}
python
  • 2 个回答
  • 60 Views
Martin Hope
Rino Bino
Asked: 2022-08-17 13:29:22 +0800 CST

在 Ansible 中使用带引号的字符串中的变量

  • 0

请以这个工作游戏为例:

- name: Display the URL
  hosts: all
  gather_facts: false
  vars:
    - host_domain: "testing.example.com"
    - default_url: "http://def.localhost.{{ host_domain }}"
    - my_url: "{{ some_undeclared_var | default(default_url) }}"
  tasks:
    - debug:
        msg: "{{ my_url }}"

这工作正常。输出如预期:

msg: http://def.localhost.testing.example.com

我想在线设置默认值,而无需先声明default_urlvar。像这样的东西:

  vars:
    - host_domain: "testing.example.com"
    - my_url: "{{ some_undeclared_var | default('http://def.localhost.{{ host_domain }}') }}"

我尝试了不同的技术:

  • my_url: "{{ some_undeclared_var | default(\'http://def.localhost.{{ host_domain }}\') }}"
  • my_url: "{{ some_undeclared_var | default(\"http://def.localhost.{{ host_domain }}\") }}"
  • my_url: "{{ some_undeclared_var | default('http://def.localhost.'{{ host_domain }}) }}"
  • my_url: "{{ some_undeclared_var | default('http://def.localhost.'host_domain) }}"

我似乎无法弄清楚这个的语法。任何人都可以帮忙吗?

ansible
  • 0 个回答
  • 53 Views
Martin Hope
Rino Bino
Asked: 2022-04-05 20:01:09 +0800 CST

pxe 引导时使用压缩的 initrd

  • 1

我正在使用带有 grub 的 netboot/pxeboot。

menuentry "Install Ubuntu 20.04" {
  set gfxpayload=keep
  echo 'Loading vmlinuz ...'
  linux  /tftp/vmlinuz ip=dhcp netboot=nfs nfsroot=10.0.0.20:/data/netboot/nfs/ubuntu2004/ boot=casper toram noquiet splash=off console=tty0 console=ttyS1,57600n8 ---
  echo 'Loading initrd, this takes a long time ...'
  initrd /tftp/initrd
}

它工作正常,但是,通过 tftp 加载 initrd 需要很长时间(30 多分钟)。我想压缩(gz/bz2)这个文件以节省一些文件传输时间。

我看到了一些例子,指的是initrd.gz(一个例子:https ://unix.stackexchange.com/questions/217002/which-iso-file-vmlinuz-and-initrd-gz-to-use-for-installing- centos-from-multiboo)但是当我试图用 gzip 压缩文件并使用它时,我收到一个错误,例如:

[   12.543547] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6
[   12.558487] Please append a correct "root=" boot option; here are the available partitions:
[   12.575161] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

有没有办法压缩这个文件,以便它可以传输更小的文件大小,并在尝试挂载根 fs 之前将其解压缩?

或者,有没有办法通过不同的协议(HTTP/FTP/SFTP/SCP/etc)传输它?

boot pxe-boot linux-kernel tftp
  • 2 个回答
  • 490 Views
Martin Hope
Rino Bino
Asked: 2022-01-14 14:41:41 +0800 CST

Jenkins CLI .jar 文件存储在服务器的什么位置?

  • 3

我在脚本中使用 Jenkins CLI 来实现一些 Jenkins 自动化(https://www.jenkins.io/doc/book/managing/cli/)。

根据文档,您必须首先从 Jenkins 主机下载 .jar。

目前我正在通过运行来做到这一点wget http://localhost:8080/jnlpJars/jenkins-cli.jar

但是我想减少脚本中的步骤数量,所以我想跳过那个下载步骤,jenkins-cli.jar直接在 Jenkins 服务器上找到它,而不是先下载它。

我尝试跑步find / -name "jenkins-cli.jar"没有成功。

有谁知道它存储在哪里?它肯定存在于某个地方,因为您可以直接从 Jenkins 主机下载它。

jenkins
  • 1 个回答
  • 715 Views
Martin Hope
Rino Bino
Asked: 2020-11-14 11:55:49 +0800 CST

Jenkins Github 分支源插件在今天的 Github 身份验证更改后使用 Github 令牌失败

  • 1

由于今天的 Github auth 更改弃用了 user/pass auth 和当前的 Github 分支源插件,我目前面临 Jenkins <> Github 集成的问题。

弃用信息:https ://developer.github.com/changes/2020-02-14-deprecating-password-auth/#removal

插件:https ://github.com/jenkinsci/github-branch-source-plugin

  • 詹金斯:2.249.3
  • Github 分支源码插件 2.9.1(最新)
  • 此詹金斯安装仅是私有的(不面向公众)
  • 正在访问的 repo 是私有的(不是面向公众的)
  • Github 令牌具有完整的 repo 访问权限

问题:

该插件强制 Github 不再接受的用户/密码验证。说明将令牌放在密码字段中,但在我这样做后它仍然抱怨:

无法使用用户名/密码身份验证访问 API

https://developer.github.com/changes/2020-02-14-deprecating-password-auth/#removal

说明状态:“仅支持用户名/密码凭据”并指示在密码字段中添加令牌(屏幕截图显示此)

随附的屏幕截图清楚地显示了崩溃:

在此处输入图像描述

对 ServerFault 的问题:

  • 我是否为凭据输入了错误的令牌?我试过了:
    • 一个空用户,以令牌作为密码
    • 令牌作为用户并通过
    • 令牌描述为用户,令牌为密码
  • 通常我会向开发人员提交有关应用程序问题的 Github 问题。但是,由于没有“问题”组件可以向插件开发人员提交问题,所以我想在这里问我的问题,以防其他人遇到这个问题。
jenkins github
  • 3 个回答
  • 536 Views
Martin Hope
Rino Bino
Asked: 2020-09-29 09:59:39 +0800 CST

在 RDS 上创建 Postgres 索引比较弱的 linux 主机慢得多

  • 3

背景:

  • Postgres 10.9
  • DB 在开发主机上作为 docker 容器运行。(t3.large,gp2 500GB 存储空间)
  • DB 在 RDS 中运行,用于暂存和生产。(m5.2xlarge,gp2 1TB 存储)

一切都很好,很长一段时间都是这样,而且我的 db alter 时间似乎总是在 prod/staging 与 dev 中更快(如预期的那样)。

问题/问题:

我有一个特定的索引创建,它在 RDS(更强大)中比在本地开发主机上花费的时间长 20 倍。我在过去几年中看到的所有其他案例,RDS 主机都更快,因为它具有更强的计算能力和更高的 I/O 速度。

  • 实例之间的数据和模式是相同的。使用 pg_dump + pg_restore 每晚用新数据加载开发数据库。
  • 与我数据库中的其他表相比,该表相对较大(3000 万行)(大多小于 100 万行)

这是一个简单的索引操作:

CREATE INDEX idx_email_records_created ON email_records(created_at);

在本地 linux 开发盒上:

db=> CREATE INDEX idx_email_records_created ON email_records(created_at);
CREATE INDEX
Time: 68523.557 ms (01:08.524)

在 RDS 主机上:

db=> CREATE INDEX idx_email_records_created ON email_records(created_at);
CREATE INDEX
Time: 1490902.929 ms (24:50.903)

我检查了所有正常的东西: CPU 负载(在所有情况下都免费),内存(在所有情况下都免费)。锁定/表使用等

开发主机每晚都会使用新的 prod db 克隆恢复,因此行数没有差异。

我检查了 max_parallel 并尝试了类似ALTER TABLE email_records SET (parallel_workers = ##);但似乎没有任何区别的东西。

任何帮助表示赞赏

postgresql indexing amazon-rds
  • 1 个回答
  • 643 Views
Martin Hope
Rino Bino
Asked: 2020-09-22 07:42:48 +0800 CST

替代在 nginx 位置块中使用 if 语句

  • 0

Nginx 配置目标:

  • 检查某个 cookie 是否存在(不管值是什么)
  • 如果它不存在,请包含特定的配置导入。
  • 我只想将我的规则应用于某些位置,我不能将这些条件应用于全局 nginx 配置。这是特定的位置。

目前,配置看起来像这样,并且运行良好:

  location ~ ^/somedestination\.php(/|$) {
    <... truncated other config lines for readability ...>

    include includes/xx-cache-config.conf;

    <... truncated other config lines for readability ...>

    fastcgi_pass php-fpm:9000;
  }

该服务器有许多位置块,每个块都有import自己的缓存配置。这是一个只有 cgi 的应用程序,这里没有直接的 try_files。

因此,为了实现上述目标,我正在尝试类似的东西,检查$cookie_user变量是否存在,并且仅在不存在 Cooke 时应用我的配置:

  location ~ ^/somedestination\.php(/|$) {

    # only include cache config if the cookie is null/empty
    if ($cookie_user = false) {
      include includes/xx-cache-config.conf;
    }

    fastcgi_pass php-fpm:9000;
  }

似乎合乎逻辑,但问题出在: 我偶然发现了这个:https ://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/


问题:如果我们不应该if在 Location 上下文中使用(根据 nginx 官方文档),我应该怎么做?


编辑:这是条件子句中包含的内容。目前nginx 总是包含这个配置,我现在的目标是有时不包含它(当 cookie 存在时)。

注意:区域配置本身包含在其他地方。这个包含的配置启用它。

includes/xx-cache-config.conf

fastcgi_cache CACHE_TLRS;

fastcgi_cache_bypass $no_resource_cache;

fastcgi_no_cache $no_resource_cache;

fastcgi_cache_valid 200 301 48h;
fastcgi_cache_valid 302     4h;

fastcgi_cache_revalidate on;
fastcgi_cache_use_stale http_500 http_503 timeout updating;

fastcgi_cache_lock on;
fastcgi_cache_lock_age 15s;
fastcgi_cache_lock_timeout 5s;

fastcgi_ignore_headers cache-control;

fastcgi_cache_key "$scheme$host$uri";
add_header X-Cache $upstream_cache_status;
cache nginx
  • 1 个回答
  • 579 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve