Ubuntu 22的安装,换源和配置(详细)

目录

 1.安装

1.1.打开虚拟机

 1.2.选择语言

1.3.版本更新 (跳过即可)

1.4. 键盘配置

1.5.选择安装类型 

1.6.网络配置

1.7.配置代理

1.8.引导式存储布局配置 

1.9.配置用户信息 

1.10.安装OpenSSH服务包 

1.11.选择安装服务软件包 

2.换源和配置 

 2.1.查看当前系统版本

2.2.配置相关参数 

2.2.1.配置root用户的登录密码,然后su登录

2.2.2.开启root用户SSH远程登录权限 

2.2.3.配置sudo普通用户权限无需输入密码 

2.3.换源 

2.4.修改时区 


 1.安装

提示:先创建一个基于Ubuntu 64位操作系统的VM虚拟机

1.1.打开虚拟机

默认选中Try or Install Ubuntu Server安装选项,回车(等待一会)

 1.2.选择语言

等待后进入安装欢迎界面后,键盘上下键选择安装语言,这里我默认选择English,tab键回车确认

1.3.版本更新 (跳过即可)

提示有新版本可用,询问是否更新到新版本(Update to the new installer),或者不更新并继续安装当前版本(Continue without updating),这里我选默认的“Continue without updating”,回车确认

1.4. 键盘配置

这里默认选择English (US),选中Done并确认回车

1.5.选择安装类型 

默认Ubuntu Server,选中Done并回车

Ubuntu Server (minimized) 为最小安装

1.6.网络配置

这里默认DHCP自动获取IP地址,选中Done回车

1.7.配置代理

这里不作自定义配置,选中Done并回车确认

配置 Ubuntu 系统镜像源地址,默认为http://cn.archive.ubuntu.com/ubuntu,需等待一会

等待出现如下,就直接Done回车 

1.8.引导式存储布局配置 

选择默认的,Done回车

弹出确认框 ,选中Continue并回车确认

1.9.配置用户信息 

配置用户名,登录密码,根据个人情况填写,然后选中Done并回车确认

1.10.安装OpenSSH服务包 

这里选择Continue回车确认

勾选 Install OpenSSH server 安装 OpenSSH 服务包,以启用对服务器的安全远程访问,然后选中Done 并回车确认

 

1.11.选择安装服务软件包 

一些精选的流行服务软件包,可根据个人情况进行选择安装(上下键选择并按空格键勾选中,回车查看详情),这里我不勾选任何的软件包,直接选中Done 并回车确认

 配置完成,正式开始安装系统。根据网络情况,如果网络一般的情况下软件包下载可能需时较长,可选中View full log 并回车查看完整的系统安装日志

安装完成后,选中Reboot Now 并回车以重启系统  

如果出现[FAILED] Failed unmounting /cdrom 错误,且提示Please remove the installation medium, then press ENTER: Unmounting /cdrom ,则按下 ENTER 回车键让它继续重启即可

2.换源和配置 

 2.1.查看当前系统版本

进入系统输入安装时设定的用户名及密码进行系统登录

-- 查看当前系统版本
lsb_release -a

 

2.2.配置相关参数 

2.2.1.配置root用户的登录密码,然后su登录

$ sudo passwd root
New password:                # 此处输入 root 用户的登录密码(新设置密码)
Retype new password:        # 此处再次输入 root 用户的登录密码(确认与上面的密码输入一致)
passwd: password updated successfully
$ su root
Password:                    # 此处输入上面设置的 root 用户登录密码,回车即可登录至 root 用户

2.2.2.开启root用户SSH远程登录权限 

可切换至root 用户,修改/etc/ssh/sshd_config 中配置

$ su  root                     # 切换root用户
Password:                   # 输入root用户密码
$ vim /etc/ssh/sshd_config  # 编辑sshd_config文件

 按G移动到最后一行,并按o键在最后一行添加 PermitRootLogin yes 配置,:wq 保存退出

PermitRootLogin yes

 重启  SSH Server 服务

systemctl restart sshd

 此时再进行远程SSH 登录root  用户,即可成功连接

2.2.3.配置sudo普通用户权限无需输入密码 

不要切换到普通用户,直接使用root用户操作

vim /etc/sudoers           # 编辑sudoers文件

通过键盘的下键移动到配置文件的最后一行,并按 i 键将原%admin ALL=(ALL) ALL 修改为%admin ALL=(ALL) NOPASSWD: ALL ,将%sudo ALL=(ALL:ALL) ALL 修改为%sudo ALL=(ALL:ALL) NOPASSWD: ALL ,即添加了NOPASSWD  

 # User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) NOPASSWD: ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

# See sudoers(5) for more information on "@include" directives:

 :wq! 保存退出,这样 sudo 普通用户权限就无需输入密码了  

2.3.换源 

要先切到root用户再进行操作

2.3.1.备份原始源

首先将source.list 复制为source.list.bak 备份

 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2.3.2. 替换新源

以阿里云源为例,执行以下命令替换默认源

 sudo sed -i 's/http:\/\/cn.archive.ubuntu.com/https:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list

2.3.3. 在终端中运行以下命令更新软件包列表

 sudo apt update

2.3.4. 运行以下命令升级已安装的软件包

 sudo apt -y upgrade

2.4.修改时区 

2.4.1.查看和更改系统的时间和日期设置

timedatectl

 

2.4.2. 获取有效时区列表(非必须)

# 获取所有有效时区列表
timedatectl list-timezones
# 根据地理位置找到本地的时区
timedatectl list-timezones | grep -o "Asia/S.*"

2.4.3.设置时区

 sudo timedatectl set-timezone Asia/Shanghai

<think>好的,我现在要解决用户在IAR编译器中遇到的错误:“incomplete type is not allowed”。首先,我需要理解这个错误的含义常见原因。根据我的知识库,这个错误通常发生在代码中使用了未完全定义的类型,比如结构体或联合体声明了但未定义,或者前向声明了某个类型但没有提供完整的定义。 首先,我应该检查用户代码中是否有结构体或联合体的声明但没有定义的情况。比如,如果有一个结构体声明为`struct MyStruct;`,但没有后续的完整定义,那么在需要该结构体大小或成员的地方,编译器就会报这个错误。这时候,需要用户补全结构体的定义,包括成员变量。 其次,检查是否在头文件中只声明了类型而没有包含定义。例如,如果在头文件中使用前向声明,但在使用该类型的源文件中没有包含实际的定义头文件,这也会导致错误。此时,需要确保在使用类型的地方包含了正确的头文件,或者将前向声明替换为完整的定义。 另外,还要考虑typedef的问题。如果用户使用了typedef创建别名,但原始类型未完全定义,同样会引发错误。例如,`typedef struct MyStruct MyType;`之后,如果尝试使用MyType但MyStruct尚未定义,就会出错。需要确保在使用typedef之前,原始类型已经被完整定义。 此外,数组声明中的类型不完整也是一个常见原因。比如声明数组时,如果元素类型未完全定义,编译器无法确定数组的大小,导致错误。需要检查数组声明中的类型是否已经完整定义。 可能还有其他情况,比如在CC++混合编程时,如果没有正确使用extern "C",或者在头文件中遗漏了必要的包含,也可能导致类型不完整。需要用户检查这些方面。 接下来,我需要将这些可能的原因整理成清晰的解决步骤,并给出具体的代码示例,帮助用户理解如何修改。同时,根据用户提供的引用内容,虽然引用[1]引用[2]是关于其他错误的,但用户可能希望看到类似的结构,即分点说明解决方案,并引用相关资源。 最后,生成相关问题,帮助用户进一步了解可能相关的编译错误,比如类型未定义、前向声明问题等。这样用户可以有更全面的认识,预防其他类似错误的发生。</think>### IAR编译器错误'incomplete type is not allowed'解决方案 该错误表示代码中使用了**未完全定义的类型**,编译器无法确定其内存布局或成员信息。以下是具体原因及解决方法: #### 1. 结构体/联合体未定义完整 若声明了结构体但未定义成员,在实例化时会报错: ```c struct MyStruct; // 前向声明不完整 struct MyStruct var; // 错误:使用未完成类型 ``` **解决方案**:补全类型定义 ```c struct MyStruct { int id; char name[20]; }; ``` #### 2. 头文件包含缺失 当跨文件使用类型时,需确保定义可见: ```c // file.h struct Data; // 前向声明 // file.c struct Data { // 实际定义 int value; }; ``` **解决方案**:在使用该类型的文件中包含定义头文件 ```c #include "file.c" // 包含实际定义 ``` #### 3. typedef别名问题 使用typedef时原始类型必须完整: ```c typedef struct Node NodeT; // 前向声明 NodeT* ptr; // 允许指针声明 NodeT instance; // 错误:不完整类型 ``` **解决方案**:先完成类型定义再typedef ```c struct Node { int data; struct Node* next; }; typedef struct Node NodeT; ``` #### 4. 数组声明不完整 数组元素类型必须完全定义: ```c struct Element; struct Element arr[10]; // 错误:元素类型未定义 ``` **解决方案**: ```c struct Element { int type; float value; }; struct Element arr[10]; // 合法 ``` #### 调试建议 1. 在IAR工程中搜索错误行号定位问题代码 2. 使用Go to Definition功能追踪类型定义 3. 检查所有头文件包含链 4. 确认没有循环依赖的头文件 编译器需要知道类型的完整信息才能: - 计算sizeof大小 - 分配内存空间 - 访问成员变量 - 进行类型对齐 [^1]: 类似类型转换错误可参考浮点转整型的类型适配问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值