皮皮网
皮皮网

【火狐大灌篮源码】【taro框架源码解读】【app怎么转交源码】ntp 源码编译

来源:redis 源码 复制 发表时间:2024-12-29 05:52:50

1.ntpdc命令如何在交互模式下执行对等体列表操作?
2.ntpdate失败报错“the NTP socket is 源译in use, exiting”
3.使用openwrt路由(例极路由3(HC5861))过校园网多设备检测(非破解) (宿舍共网)
4.天准vga-xavier智能相机环境搭建和服务部署
5.linux C/C++实现同步NTP时间
6.linux 编译生成的NTP为什么不能校时

ntp 源码编译

ntpdc命令如何在交互模式下执行对等体列表操作?

       ntpdc 是一个强大的工具,专门用于监控和管理 NTP 服务(ntpd)的码编状态。它采用源代码中定义的源译 NTP mode 7 控制消息格式,支持交互式操作和命令行参数输入。码编通过 ntpdc,源译用户可以获取丰富的码编火狐大灌篮源码状态和统计信息,包括配置选项,源译这些选项在 ntpd 启动时以及运行时都能进行设置。码编

       使用 ntpdc 的源译基本语法是输入其命令后跟相关参数。以下是码编几个常见的用法:

       在远程主机执行特定命令:ntpdc -c command

       强制进入交互模式:ntpdc -i

       获取对等体列表,显示为点阵数字格式:ntpdc -n

       查看服务器已知对等体及其状态:ntpdc -p 和 ntpdc -s,源译后者提供略有不同的码编输出格式

       通过这些实例,你可以在 Linux 系统中轻松地获取和管理 NTP 服务的源译相关信息。无论是码编实时监控还是配置调整,ntpdc 都是源译 NTP 管理不可或缺的实用程序。

ntpdate失败报错“the NTP socket is in use, exiting”

       今天,我被老大要求处理产品部署失败的问题。产品是云容器平台,部署中遇到了同步时间的挑战。代码调用ntpdate,但遇到报错“the NTP socket is in use, exiting”。我首先尝试搜索解决方案,发现在停用ntpd服务后问题得以解决。taro框架源码解读然而,为了解决根本问题,我深入研究了ntpdate的源码。

       通过访问ntpdate的官方网站并查看源码下载地址,我了解到ntpdate的代码实际上在GitHub上。这表明,使用ntpdate时应直接获取其源代码,而非依赖旧版本。

       在源码中,我找到了导致错误的NTP socket使用的端口号是。通过查阅代码,我发现此端口号是硬编码的,这表明作者在设计时可能并未考虑到代码的可维护性。

       为了定位到端口号被占用的进程,我检查了当前服务器上的所有进程。结果发现,进程与ntpd服务相关联,且该进程由父进程1启动。通过进一步的排查,我确定了正是ntpd服务占用了端口号。

       最终,我关闭了ntpd服务,app怎么转交源码从而解决了ntpdate失败的问题。这个过程虽然解决了当前问题,但更重要的是,它提供了面对类似情况时的思考方式和解决策略。下次遇到类似问题时,我们就可以根据所学方法,快速定位并解决端口占用的问题。

使用openwrt路由(例极路由3(HC))过校园网多设备检测(非破解) (宿舍共网)

       校园网多设备检测使用openwrt路由(如极路由3(HC))的步骤和技巧如下:

       首先,你需要了解校园网可能采取的检测策略,包括基于IPv4数据包包头内的TTL字段的检测、基于HTTP数据包请求头内的User-Agent字段的检测(UA2F)、DPI(深度包检测技术)、基于IPv4数据包包头内的Identification字段的检测、基于网络协议栈时钟偏移的检测技术、Flash Cookie检测技术。这些检测方法可能会限制多设备接入。

       针对极路由3(HC),采用Lean大佬的Openwrt源码进行编译,登陆IP为..1.1,密码为"password"。在编译时,确保TurboACC技术关闭,django源码在哪里以免影响User-Agent字段,导致问题如微信无法发送。解决方法是执行命令"uci set ua2f.firewall.handle_mmtls=0 && uci commit ua2f"。

       刷入Openwrt后,进行以下配置:

       1. 启用NTP客户端和作为NTP服务器提供服务,填写候选NTP服务器为:ntp1.aliyun.com、time1.cloud.tencent.com、stdtime.gov.hk、pool.ntp.org。

       2. 添加自定义防火墙规则。

       3. 对UA2F进行配置,确保检测正确。

       配置完成后,即可进行多设备检测。确认真实User-Agent显示正确,说明配置成功。一个宿舍内可用一台路由器加一个账号上网。

       感谢Lean提供的Openwrt源码,参考关于某大学校园网共享上网检测机制的研究与解决方案,UA2F技术来自Zxilly/UA2F,修改IPID技术来自CHN-beta/rkp-ipid。祝学子们早日摆脱校园网限制。官能奇谭源码种子

天准vga-xavier智能相机环境搭建和服务部署

       天准智能相机环境搭建与服务部署指南

       一、环境检查

       - 查看系统版本

        # sudo lsb_release -a

       # df -h

       - 设备版本

       # Cat /proc/version

       - 硬件架构查询

       # arch

       - 查看默认安装软件

       # jetson_release

       - 评估服务器性能

       检查CPU、内存、硬盘等资源占用情况

       二、基础环境安装

       - SSH服务器配置

       # 打开SSH服务器配置文件

       # vi /etc/ssh/sshd_config

       将PasswordAuthentication no 修改为 PasswordAuthentication yes

       保存退出并重启SSH服务

       - SSH连接服务器

       使用perception用户登录服务器

       三、三方库安装

       - XAVIER 版本依赖环境安装

       - ORIN 版本依赖环境安装

       - 安装对应库源码并编译

       参考链接:blog.csdn.net/weixin_...

       - 编译与安装

       使用make和make install

       - 赋予执行权限

       例如:chmod u+x ./ffbuid/version.sh

       - 建立软连接

       sudo ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg

       sudo ln -s /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe

       四、其他

       - 网络连接

       # vim /etc/network/interfaces

       修改为dhcp模式,动态分配IP

       - 服务器时间同步

       检查与设置时区

       启用网络时间协议(NTP)同步

       手动设置时间

       确保时间同步持久化

       五、优化内容

       - pb版本更换

       执行编译命令生成对应pb文件

       优化cmakelist.txt文件,实现自动编译

       - 通信模块自动识别

       在cmakelist.txt中配置依赖库匹配

       - 模块配置

       从顶层目录传入硬件架构相关配置路径

       - OpenCV4.5.4安装问题

       确认缺少头文件原因,可能需更新或重新编译相关依赖库

linux C/C++实现同步NTP时间

       在Linux C/C++中,实现同步NTP时间涉及时间类型和相关函数的使用,以及NTP服务器的请求和系统时间的更新。

       首先,理解时间类型至关重要。在程序中,我们通常会遇到本地时间(locale time)、格林威治标准时间(GMT, UTC)和世界标准时间(UTC),这些时间以秒为单位,自年1月1日::起计算。例如,通过time()函数获取的秒,通过ctime()函数可以转换为'Fri Oct :: '这样的格式。

       对于获取时间,Linux提供了多种函数,如UTC用time()、asctime()和gmtime(),而经时区转换后的本地时间则用ctime()和localtime()。进一步理解这些函数的差异和用法,可以参考相关博客。

       实现NTP同步的步骤包括:发送一个NTP请求报文,从选定的NTP服务器,如...(国家授时中心)获取时间。对于系统时间的更新,通常需要root权限,但可以通过设置程序的UID(如使用chmod u+s)来让普通用户也能执行需要root权限的操作,如settimeofday(&tv, NULL)。

       如果你想要深入学习Linux C/C++,可以考虑零声教c/c++项目的白金卡课程,它提供实战项目的指导,帮助你打通c++技术方向,包括5大实战项目,确保简历中的项目丰富。课程包括5天答疑服务和学习周期内全额退款保障,报名后可获取源码和其他学习资料。

linux 编译生成的NTP为什么不能校时

       因为你没有启动ntpd服务

       直接执行的话,应该是这样:

       #/usr/local/bin/ntpd &

       然后客户端校时应该这样:

       #./ntpdate ntp.fudan.edu.cn(一个时间服务器)

       (先cd到ntpdate的目录)

       -----

       每天定时校时:

       修改crontab文件:

       #crontab -e

       加入:

       5 * * * * /usr/sbin/ntpdate ntp.fudan.edu.cn

       表明每5分钟校时一次。

--

       Prometheus 实现邮件告警(Prometheus+Alertmanager+QQ邮箱或者网易邮箱,目前测试过这两种邮箱都可以发送告警邮件)

        Prometheus实现邮件告警原理如下:

        Prometheus官方有一个附带的中间件:alertmanager,通过设置rules规则和路由转发可以实现邮件告警,前提是你需要有一个可以发送邮件的邮件服务端(可以自建或者使用互联网公司提供的免费邮箱)

        告警原理图

       Prometheus完整架构图

        我之前得出的错误结论如下:

        推荐直接在虚拟机操作系统上直接安装Prometheus和Alertmanager,不推荐其中任何一方在容器中运行,因为测试过在容器中运行Prometheus和alertmanager,结果出现如下错误情况

        第一种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus却提示节点依然在线?有时候却能够正常显示节点掉线跌机,生成告警发送邮件

        第二种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,但是没有发送邮件,我手动恢复node-exporter后,告警解除,邮件能正常发送邮件提示告警已经解除。。。。

        第三种情况是:我的node-exporter掉线跌机了(手动关机,模拟突然掉线跌机),Prometheus提示节点掉线,告警生成,正常成功发送邮件,我手动恢复node-exporter后,告警解除,邮件没有发送出来。。。。

        以上三种情况之前经常出现,当时第一步以为是自己设置的scrape_interval不合理导致的,结果调试几次,问题没有解决,第二步以为是自己的服务器时间没有做到精确同步,然后我去设置和阿里云的ntp服务器同步,结果问题依然没有解决,第三步,换个方向,把alertmanager迁移到虚拟机操作系统上安装运行,问题解决!

       åŒ—京时间是GMT+8小时,有些同志的时间可能是UTC的,但是如果是在要求不太十分精确的情况下,UTC时间是刚刚好等于GMT时间

        为了避免时区的混乱,prometheus所有的组件内部都强制使用Unix时间,对外展示使用GMT时间。

        要改时区有两个办法

        1 .修改源码,重新编译。

       2. 使用 docker 运行 Prometheus,挂载本地时区文件

        docker run --restart always -e TZ=Asia/Shanghai --hostname prometheus --name prometheus-server -d -p : -v /data/prometheus/server/data:/prometheus -v /data/prometheus/server/conf/prometheus.yml:/etc/prometheus/prometheus.yml -u root prom/prometheus:v2.5.0

        正文开始

        安装alertmanager

        容器安装方式:

        docker run -d --name alertmanager -p : -v /usr/local/Prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest

        先在宿主机/usr/local/Prometheus下创建一个文件夹alertmanager,然后在文件夹里创建alertmanager.yml配置文件,待会才能映射到alertmanager容器里的/etc/alertmanager目录下

       global:全局配置

           resolve_timeout: 问题解决的超时时间

           smtp_from: 发送告警邮件的邮箱账号

           smtp_smarthost: é‚®ç®± SMTP 服务地址,这里是以QQ邮箱为例,也可以用网易邮箱,这个和我之前设置zabbix邮件告警时的配置一样

           smtp_auth_username: 如果没有设置邮箱别名,那就是账户名

           smtp_auth_password:  邮箱的授权码,不是 账户密码,你可以在QQ邮箱或者网易邮箱网页端设置,开启 POP3/SMTP æœåŠ¡æ—¶ä¼šæç¤ºï¼Œå’Œé…ç½®zabbix邮件告警的时候几乎一样

           smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

       templates: 告警模板目录,可以不编写模板,有默认模板

            Subject: '{ { template "email.default.subject" . }}'

            html: '{ { template "email.default.html" . }}'

       route:报警的分发设置

            group_by:分组

            group_wait: 分组等待时间

            group_interval: 5m 每组时间间隔

            repeat_interval: m 重复间隔

            receiver: 接收方式,请注意!这里的名字要对应下面receivers中的任何一个名字,不然会报错,这里其实就是选择方式,有邮箱,企业微信,wehook,victorops等等

       receivers:接受方式汇总,即告警方式汇总

        例子:

        receivers:

        - name:'default-receiver' 

        email_configs:

        - to:'whiiip@.com'    

          html: '{ { template "alert.html" . }}'    

          headers: { Subject: "[WARN] 报警邮件test"}

       inhibit_rules:   æŠ‘制规则

        当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

        包括源匹配和目标匹配

        alertmanager官方是这样说的

        Inhibition

        Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing.

        Example:  An alert is firing that informs that an entire cluster is not reachable. Alertmanager can be configured to mute all other alerts concerning this cluster if that particular alert is firing. This prevents notifications for hundreds or thousands of firing alerts that are unrelated to the actual issue.

        Inhibitions are configured through the Alertmanager's configuration file.

        当存在与另一组匹配器匹配的警报(源)时,禁止规则会使与一组匹配器匹配的警报(目标)静音。目标警报和源警报的equal列表中的标签名称都必须具有相同的标签值。

        在语义上,缺少标签和带有空值的标签是同一件事。因此,如果equal源警报和目标警报都缺少列出的所有标签名称,则将应用禁止规则。

        为了防止警报禁止自身,与规则的目标和源端 都 匹配的警报不能被警报(包括其本身)为真来禁止。但是,我们建议选择目标匹配器和源匹配器,以使警报永远不会同时匹配双方。这很容易进行推理,并且不会触发此特殊情况。

        接着是规则rules

       ä¸è§£é‡Šäº†ï¼Œè‡ªå·±ç ”究官方文档

       alertmanager的非容器安装方式是

         wget /prometheus/alertmanager/releases/download/v0..0/alertmanager-0..0.linux-amd.tar.gz

        tar xf alertmanager-0..0.linux-amd.tar.gz

       mv alertmanager-0..0.linux-amd /usr/local/alertmanager

       vim /usr/lib/systemd/system/alertmanager.service

       [Unit]

       Description=alertmanager

        Documentation=/prometheus/alertmanager

        After=network.target

        [Service]

        Type=simple

        User=root

        ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml

        Restart=on-failure

        [Install]

        WantedBy=multi-user.target

        Alertmanager 安装目录下默认有 alertmanager.yml 配置文件,可以创建新的配置文件,在启动时指定即可。

        其余方式和上面一样

        接着是Prometheus,我之前的博客里有写了容器安装和非容器安装的方法,自己去翻阅

        然后是在prometheus.yml里修改相关配置

        首先去掉alertmanager的注释,改成IP加你设置的端口号,默认是

       æŽ¥ç€åœ¨rule_files: 下面写下规则文件的绝对路径,可以是具体文件名,也可以是*,也可以分几级文件,*默认是全部匹配

       æŽ¥ç€æ˜¯è¢«ç›‘控项的设置,这里设置完成可以在Prometheus网页里的targets里看得到

        请注意,这里设置的参数名字要和rule规则中设置的参数名字一模一样,否则你的prometheus服务会无法启动,然后报错

        如果不在特定的job下设置scrape_interval(优先级高于全局),则默认采用gobal下的scrape_interval

       æœ€åŽæ¨¡æ‹ŸèŠ‚点掉线,手动关闭node-exporter或者Cadvisor

        docker stop node-exporter 或者容器ID

        docker stop cadvisor æˆ–者容器ID

        或者把up{ { job='prometheus'}} == 1 设置成1,反向设置,不用关掉服务,就可以看看告警成不成功

       è¯´æ˜Žä¸€ä¸‹ Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。

        Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。

        Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。

        Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到 Inactive,如此循环。

       æ²¡æœ‰é…ç½®å‘Šè­¦æ¨¡æ¿æ—¶çš„默认告警格式是这样的

       èŠ‚点恢复后邮件告知是这样的

       å†™äº†æ¨¡æ¿åŽæ˜¯è¿™æ ·çš„

       è¿˜è¦é‡æ–°æ˜ å°„模板文件夹路径到alertmanager容器里的相对路径,然后重启alertmanager,当然,如果目录下没有模板文件,则不显示

       å‘Šè­¦æ¨¡æ¿

       åœ¨alertmanager.yml中修改相关设置

        重启alertmanager

        docker restart alertmanager

        最终效果不是很好

openbmc 基于qemu的调试环境搭建

       基础知识略过,本文聚焦于openbmc开发调试的核心部分——前后端联动单步调试,将全面展示搭建基于qemu的调试环境。

       搭建环境前,确保基础环境准备就绪,openbmc开发者通常具备所需基础知识。首先,下载SDK手册,选用ASpeed芯片作为典型例子,多数openbmc项目采用此版本。

       推荐使用自定义脚本辅助编译过程,自行试验后发现效果显著。成功编译后,即完成基础环境搭建。接下来,转向前后端调试环境的构建。

       使用qemu核心参数实现主机与虚拟机间端口转发,此操作相当于提供一块虚拟开发板,使得外部访问变得简单直接。主机端口转发命令示例为:hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport。此选项支持针对TCP或UDP协议的数据传输,且允许在单个命令中指定多个端口转发。

       注意系统默认apt安装的版本为6.2,过时可能导致模拟运行失败。需进行升级操作。通过命令删除旧版本,并下载openbmc发布的8.2版本,确保模拟环境的兼容性。

       前端UI运行与后端运行同步进行。通过qemu启动openbmc镜像,调整相关参数,确保与自身环境相适应。针对romulus测试镜像和ast,分别通过bitbake编译生成最新的(V.)版本,并增加gdb调试端口转发至主机端口。

       前端代码准备阶段,openbmc前端已采用vue实现(vue2),webui-vue代码通过下载获得。老版本UI已不再维护,建议基于AngularJS的代码不再考虑。Node版本推荐使用。

       项目文件修改涉及增加环境变量,可通过修改webui-vue中的配置文件vue.config.js完成,其中ip地址为Ubuntu宿主机的ip地址和转发端口。

       项目运行阶段,使用vscode打开项目,并在edge中安装Vue开发者工具。前端效果验证通过后,应能通过前端链接访问到qemu中openbmc的web后端——bmcweb,用户名和密码默认为root/0penBmc,初次访问需确认风险继续。

       VUE开发者工具的集成使得调试更加直观有效。后端调试方面,通过yocto的开发者工具devtool进行代码导出,这是整个openbmc作为大型Linux发布系统集成的体现。建议掌握两个基础命令,更详细的命令参考可获取。

       源码编译阶段,推荐通过标准SDK进行,而非增量编译。标准SDK编译过程可控,参数调整方便。导出标准SDK后,无yocto环境的主机也可调试openbmc固件,下载配套源码进行编译。

       bmcweb更新通过scp命令上传编译好的带debuginfo的版本,注意需先stop服务/kill相关进程,确保上传成功后再次启动服务。gdbserver交叉编译与安装则用于gdb调试,启动qemu时增加gdb调试端口转发至主机端口。通过gdbserver与宿主机连接,实现调试。

       调试demo以获取NTP信息页面为例,展示调试流程。总结而言,通过以上步骤搭建的gdb调试环境适用于复杂如bmcweb后端的案例,其他dbus应用程序亦可基于此方法进行调试,核心要点在于掌握gdb调试技巧。相信有了gdb,openbmc的学习与理解将更深入。

相关栏目:娱乐