搭建ubuntu容器内C/C++开发调试环境

news/2024/10/30 15:27:12/

一、创建容器

为了让容器内的调试器(gdb、lldb)能够正常调试,在创建容器时需要添加参数:

podman添加参数:--cap-add=SYS_PTRACE,docker添加参数--cap-add=SYS_PTRACE --security-opt seccomp=unconfined

否则报错:Error disabling address space randomization: Operation not permitted

如果是使用podman则使用命令:

sudo podman run -itd -p 2023:22 --name ubuntu --cap-add=SYS_PTRACE docker.io/library/ubuntu

如果是docker则使用命令:

sudo docker run -itd -p 2023:22 --name ubuntu --cap-add=SYS_PTRACE --security-opt seccomp=unconfined docker.io/library/ubuntu

名字可以随便取,将主机某个端口映射到容器中的22端口,方便远程SSH,这里为2023。

使用sudo podman attach <容器ID>连接到创建的容器,就进入Shell控制台了。

二、安装软件

1、安装openssh-server

ubuntu在安装软件前需要使用apt update进行源更新。然后使用apt install openssh-server安装openssh-server方便远程SSH连接。

apt update
apt install openssh-server
mkdir /run/sshd
/usr/sbin/sshd&

安装好openssh-server需要先创建/run/sshd目录才能启动,否则报错:

Missing privilege separation directory: /run/sshd

由于ubuntu默认情况是不允许使用root用户远程连接的,所以需要添加一个账号然后使用这个账号进行远程SSH连接,比如使用adduser admin添加一个admin账号。

# adduser admin
Adding user `admin' ...
Adding new group `admin' (1000) ...
Adding new user `admin' (1000) with group `admin' ...
Creating home directory `/home/admin' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the defaultFull Name []: Room Number []: Work Phone []: Home Phone []: Other []: 
Is the information correct? [Y/n] y

2、安装其它必要软件

apt install sudo net-tools vim
apt install gcc g++ gdb

sudo方便远程连接时,可以使用root权限;net-tools主要是可以使用netstat查看监听端口。

如果要安装clang和lldb工具链,使用:

sudo apt install clang-15 lldb-15
sudo ln -s /usr/bin/clang-15 /usr/bin/clang
sudo ln -s /usr/bin/clang++-15 /usr/bin/clang++
sudo ln -s /usr/bin/lldb-15 /usr/bin/lldb
sudo ln -s /usr/lib/llvm-15/bin/lldb-server-15.0.7 /usr/bin/

三、配置

1.让openssh-server启动时自动运行

前面是使用/usr/sbin/sshd&来直接运行openssh-server的,但是每次重启容器后,都需要手动执行这条命令才能远程SSH连接,很麻烦,可以让它在启动时自动运行。

之前笔者的博文配置与管理Ubuntu 21.10中让容器启动即运行SSH服务一节中有介绍CentOS系统如何在容器启动时就运行SSH服务,但是Ubuntu有点不一样,它不会执行/etc/profile.d/下的脚本。这里使用了简单粗暴的方法,直接修改root用户的.bashrc

如果是非root用户,使用sudo -i则会进入root用户,然后在root用户目录编辑.bashrc,在最后添加:

if [[ `ps -e |grep sshd |grep -v "grep" |wc -l` == 0 ]]
then/usr/sbin/sshd &
fi

2.修改locale以显示中文

由于ubuntu默认的locale是POSIX不能正常显示中文,需要修改为UTF-8字符编码才能显示中文,可以安装中文zh_CN.UTF-8,如果只是显示中文也可以使用自带的C.utf8

admin@dce3e311d883:~$ locale 
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

使用locale -a查看所有可用的locale

locale -a
C
C.utf8
POSIX

为了让默认的locale改为C.utf8,添加或者修改/etc/default/locale,ubuntu容器默认是没有这个文件的。sudo vim /etc/default/locale新建:

LC_ALL="C.utf8"
LANG="C.utf8"

四、SSH远程连接

远程连接工具比较多,这里介绍一下 Win10自带的OpenSSH工具。

如何安装可以参阅官网使用 Windows 设置来安装 OpenSSH

安装好后的OpenSSH在C:\Windows\System32\OpenSSH目录下。

格式:

ssh -p 端口 用户名@IP
在这里插入图片描述

注意:如果之前创建并连接过相同配置的容器,即IP、账号、端口一致的容器,然后重新创建了,则可能会报错误Host key verification failed

ssh -p 2023 admin@IP
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:4jOJDemqtgvc864kff6h/Fpp3F+6DuGNRsOBkV9kB+U.
Please contact your system administrator.
Add correct host key in C:\\Users\\admin/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\admin/.ssh/known_hosts:1
ECDSA host key for [IP]:2023 has changed and you have requested strict checking.
Host key verification failed.

此时只需要根据提示,打开C:\Users\admin/.ssh/known_hosts文件,找到[IP]:端口相匹配的一行记录删除即可。


http://www.ppmy.cn/news/230781.html

相关文章

unity游戏框架学习-资源管理

概述:https://www.cnblogs.com/wang-jin-fu/p/10975660.html 这篇只涉及基础原理,下篇会讲如何实现一个简单的资源管理框架。 一、Assets和Objects 资源(Asset)是存储在Unity项目的 Assets 文件夹中的磁盘文件。有些资源的数据格式是Unity原声支持的,有些资源则需要转换为源…

Centos 7安装python3

Centos 7安装python3 Centos 7安装python3安装依赖包2.7版本备份下载&#xff0c;编译&#xff0c;安装创建软链接修复yum测试使用django安装 Centos 7安装python3 安装依赖包 yum -y groupinstall "Development tools"yum -y install zlib-devel bzip2-devel open…

用 Python 硬核从头实现一个神经网络

编者荐语 有个事情可能会让初学者惊讶&#xff1a;神经网络并不复杂&#xff01;『神经网络』这个词让人觉得很高大上&#xff0c;但实际上神经网络算法要比人们想象的简单。 链接丨https://victorzhou.com/blog/intro-to-neural-networks/ 这篇文章完全是为新手准备的。我们会…

saas产品私有化(一) 缓存中间件适配

一.背景 名词解释:私有化一般指的是在对客交付过程中,客户由于自身数据敏感,成本控制等原因要求交付乙方将售卖的服务利用现有甲方的硬件设备或者云服务进行服务的部署. 面向场景:一般特制的是saas化的云服务软件提供商的对特殊客群的场景.其中saas行业中比较起步和规模比较大的…

爱奇艺主界面

HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>爱奇艺</title><link href"爱奇艺.css" type"text/css" rel"stylesheet"/> </head> <body…

音频播放卡顿优化

背景 音乐播放过程中,进行高CPU操作时,后台音乐播放出现卡滞。 分析 1、日志分析 日志中audioserver出现“AudioFlinger: underrun”的打印 05-27 15:35:00.186 396 777 W AudioFlinger: underrun, framesReady(0) < framesDesired(289), state: 6 05-27 15:35:0…

Android的UI卡顿

这篇文章我们主要从3个方面分析&#xff1a; 1.UI卡顿的原理 2.UI卡顿的原因分析 3.卡顿的总结 来看第一部分&#xff0c;UI卡顿的原理&#xff1a; 先来看下这样一个数字; 60fps -> 16ms 其实用户所感受到的卡顿的问题主要是来源于安卓的渲染性的问题。 我们的UI设…

直播视频卡顿延迟时如何优化

视频直播视频缓存 【摘要】 试想一下&#xff0c;当你和朋友进行视频时&#xff0c;这时突然画面卡住不动了&#xff0c;而且声音变得断断续续&#xff0c;是不是会感到特别的尴尬&#xff1f;为了避免这些情况&#xff0c;那么在直播app开发过程中&#xff0c;针对于延迟&…