https://blog.csdn.net/dakey2008/article/details/107462813
https://www.jianshu.com/p/8dd11e9f5852
https://www.lategege.com/?p=691
https://blog.csdn.net/baidu_34971492/article/details/116956761
https://blog.csdn.net/chenguang_work/article/details/86241361
最好在与服务器相同的纯净的ubuntu系统下进行软件安装和打包。因此旧的系统会将无用的deb软件安装包清理调,而这些安装包可能在离线服务器上缺少。
dpkg:用来安装.deb文件时,不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件。
apt-get:会解决和安装模块的依赖问题,并会咨询软件仓库,但不会安装本地的deb文件,apt-get是建立在dpkg之上的软件管理工具。
apt-get作为包管理器,其实类似于咱们在windows上使用的软件管家类的软件。
当运行apt-get update命令的时候,实际上相当于软件管家的“查找更新”操作。它会同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引信息(软件包的版本信息、系统要求、翻译、依赖关系等等)。
当运行apt-get upgrade命令的时候,实际上相当于软件管家的“一键更新”操作。它会对已经安装有更新的软件进行自动升级。由于确定要更新的软件包需要对本地安装的版本和列表的版本进行比较,所以要在update以后运行这一条。
一般来说使用apt安装软件,必须要有root权限,因为apt安装时需要写/usr/bin /usr/lib /usr/share等目录,而这些目录只有root用户(或有sudo权限)才有写入权限的,所以没有sudo权限的普通要用apt安装软件的话,就只能以 源码安装方式 来安装了
参考https://blog.csdn.net/qq_24406903/article/details/88376829
apt 清除命令 待删除的软件
如:apt purge python
apt autoremove
删除已安装的软件包(保留配置文件),不会删除依赖软件包,且保留配置文件。(这个命令容易导致系统无法进入系统桌面)。
高能警告:慎用本命令!!!
它会在你不知情的情况下,一股脑删除很多“它认为”你不再使用的软件;
2. apt remove
删除已安装的软件包(保留配置文件),不会删除依赖软件包,保留配置文件;
3. apt purge
删除已安装包(不保留配置文件),删除软件包,同时删除相应依赖软件包。
4. apt clean
此命令会将 /var/cache/apt/archives/ 下的 所有 deb 删掉,相当于清理下载的软件安装包。
5. apt autoclean
删除为了满足某些依赖安装的,但现在不再需要的软件包。
以上最推荐使用 apt purge
最简单 如果提示权限不够 命令前加上sudo即可。
即
Ubuntu 的apt install 和卸载正确姿势
先说下使用apt installl 安装的包的卸载:
apt-get remove: 卸载软件
apt-get purge: 卸载软件和配置文件
apt-get autoremove: 移除没有使用的依赖
apt-get clean: 删除/var/cache/apt/archives/下的所有deb包
apt-get autoclean: 删除/var/cache/apt/archives/下的过期deb包
如果你需要通过远程连接到ubuntu桌面,有很多种方式,但归根到底其实就两种VNC和RDP。
首先VNC方式连接ubuntu,ubuntu桌面版系统自带了一个vnc服务端,叫vino,设置开关中的共享屏幕其实就是这个vnc服务端,如果你是最小安装版,那就没有共享屏幕这个选项,你需要手动安装,安装方式
sudo apt install vino
如果是server端,默认是没有ubuntu图形化界面的,需要安装好才能使用远程桌面。
ubuntu的图形化界面主要有几种:unity、gnome、xfce、kde。 其中unity在ubuntu早期版本中常用,新版本ubuntu默认桌面是gnome,而如果安装的是ubuntu server系统,需要在图形化操作,一般安装xfce,它非常轻量,kde在ubuntu中不常用。
所以如果要远程连接ubuntu桌面,前提你得有一个桌面,在gnome桌面环境下,默认有一个vnc服务端叫vino,这个vnc服务端很坑爹,必须要ubuntu物理机登录上一个账户并且把安全认证关闭才能通过vnc客户端连接,比如vnc-viewer。
关闭安全认证方式有两种,一种直接通过命令:
sudo gsettings set org.gnome.Vino require-encryption false
另一种方式通过安装工具,使用工具来关闭,这个工具就是dconf-editor
sudo apt-get install dconf-editor
选择: org->gnome->desktop->remote access->require encrytion 关闭
系统自带的vino很鸡肋,所以如果你想用vnc,就安装一个第三方的吧,vnc4server,使用这个需要关闭系统默认的共享桌面,你可以在图像化菜单中关闭屏幕共享,或者直接卸载 sudo apt remove vino ,为什么要关闭,因为你打开的话就占用了5900端口,只要是vnc服务,默认端口都是5900,如果不关闭,会造成其他vnc服务端开启失败。
然后安装vnc4Server
sudo apt install vnc4server
具体配置请查看章节二。
rdp是windows系统专用的远程连接方式,但是ubuntu等linux系统下可以通过移花接木的方式,也就是xrdp, xrdp本身不具备桌面服务功能,需要和图形化桌面配合,这个提供桌面能力的其实就是xorg,xorg在ubuntu中默认存在,所以通过xrdp连接远程桌面默认会选择xorg,xorg为xrdp提供桌面服务,xrdp本身提供远程连接能力。如果你安装了GNOME, 那xorg就将GNOME桌面远程提供给你,如果你安装了xfce,xorg就将xfce桌面提供给你。可以说xorg是远程桌面服务的中间件,但是xorg和gnome配合不是很好,往往会有问题,但是网上也有解决方案,最佳的配合还是xfce+xorg+xrdp,由于xorg是ubuntu默认存在的图形化能力,所以只要在ubuntu中安装上xrdp,如果你的桌面系统是xfce就能直接使用远程桌面。
#如果没有xfce桌面,需要安装
sudo apt update
sudo apt install xubuntu-desktop
#安装xrdp
sudo apt install xrdp
#Xrdp 使用/etc/ssl/private/ssl-cert-snakeoil.key,它仅仅对“ssl-cert” 用户组成语可读。运行下面的命令,将xrdp用户添加到这个用户组:
sudo adduser xrdp ssl-cert
#重启就能使用
sudo systemctl restart xrdp
windows可以通过远程桌面客户端连接了,xrdp的端口和rdp一样都是3389,所以可以直接使用windows自带的远程桌面连接工具,连接口弹出窗口,默认选中了xorg,输入ubuntu用户名密码就可以登录,这个和ubuntu下面的屏幕共享没有半毛钱关系,当然,xrdp不仅可以选择xorg,还能选择vnc-any,也就是选择了这个,你可以连接vnc服务端,也就是 xrdp不仅可以和xorg配合,也能和vnc4server、vino、tightvncserver等vnc服务端配置使用。
sudo apt install xfce4* #xfce4桌面已经安装的可忽略
sudo apt install vnc4server #安装VNC4,注意不是TIGERVNC或者其他
vncserver #启动,如有密码设置,则设置后记下
vncserver -kill :1 #停止默认的vncsever
vim ~/.vnc/xstartup #编辑已有的vncserver xstartup配置,如果打开是空的,则未正确找对该配置文件位置。
使用以下配置,该配置虽然简单,但是和其他配置相比,能解决以下报错:
xfce4-session: Another session manager is already running
····
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
export XDG_MENU_PREFIX="gnome-flashback-"
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#gnome-terminal &
#nautilus &
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check &
如果vnc后的画面是纯灰色,则安装gnome-panel
sudo apt install gnome-panel
遇到的一个问题:在vnc桌面中无法打开系统设置。待解决!
$ vncserver -geometry 1920x1080 -depth 24 :4
参数说明:
-geometry 用于设置想打开的界面的分辨率,与自己的显示器分辨率匹配。如2560x1440、1920x1080、1024x768等。
-depth 用于设置显示颜色深度。最大24。
:4 显示号,自行指定。
删除虚拟桌面: vncserver -kill :桌面编号 (注意空格),如下面的命令是删除像素编号为2的虚拟桌面
vncserver -kill :2
netstat -lnpt |grep Xvnc
最好使用root用户来查看当前打开的所有端口。而使用普通用户只能看到普通用户下打开的端口。
输入IP和端口号,如xxx.xxx.xxx.xxx:5901
密码:123456
可以在Properties选项中调节终端显示的画质(High)和缩放比(100%或Scale to fit windows),之后全屏显示即可完全显示屏幕。
开机启动脚本如下
sudo gedit /etc/init.d/vncserver_start
写入以下内容:
#!/bin/sh
### Customize this entry
# Set the USER variable to the name of the user to start tightvncserver under
export USER='Andy' #修改成自己的userid
### End customization required
eval cd ~$USER
case "$1" in
start)
# 启动命令行。此处自定义分辨率、控制台号码或其它参数。
su $USER -c '/usr/bin/vncserver -depth 24 -geometry 1280x720 :1'
echo "Starting vncserver server for $USER "
;;
stop)
# 终止命令行。此处控制台号码与启动一致。
su $USER -c '/usr/bin/vncserver -kill :1'
echo "vncserver stopped"
;;
*)
echo "Usage: /etc/init.d/vncserver_start {start|stop}"
exit 1
;;
esac
exit 0
注:用户名要修改成自己的修改USER变量。
给vncserver_start文件加执行权限,并更新开机启动列表。
sudo chmod 755 /etc/init.d/vncserver_start
sudo update-rc.d vncserver_start defaults
然后再reboot一下,就不需要到板子上面开启vncserver了,直接打开VNC Viewer登录。
sudo apt-get install XXXXX
如果在线电脑上已经安装过这些软件,可以使用--reinstall
命令强制重新安然软件。
sudo apt-get --reinstall install XXXXX
执行完上述指令后,XXXX软件的安装包就下载到了/var/cache/apt/archives目录下
根目录下新建一个offlinePackage文件夹
sudo mkdir /offlinePackage
注意:deb包在/offlinePackage/archives目录下,因为apt-get install XXX软件时会自动到archives目录下寻找安装包
sudo cp -r /var/cache/apt/archives /offlinePackage
3.修改文件夹的权限,可读可写可执行
sudo chmod 777 -R /offlinePackage/
4.建立deb包的依赖关系
sudo dpkg-scanpackages /offlinePackage/archives/ /dev/null |gzip >/offlinePackage/Packages.gz
如果出现错误:sudo: dpkg-scanpackages: command not found
则需要安装dpkg-dev工具:
sudo apt-get install dpkg-dev
5.将生成的Packages.gz包复制到和deb同目录下
sudo cp /offlinePackage/Packages.gz /offlinePackage/archives/Packages.gz
2.3.打包成压缩包,以备后用
tar cvzf offlinePackage.tar.gz offlinePackage/
保存offlinePackage.tar.gz文件到U盘或服务器
注1:如果提示E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ,E:
无法获取 dpkg 前端锁
(/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?,则可能原因有两种,①apt-get前忘记加sudo,则需重新加上。
②此外,如果你使用的是克隆虚拟机,也可能会出此问题,需要重新启动电脑。。 ③如果还不行,ps -e | grep apt
查看进程编号,利用sudo kill 进程编号杀掉相应进程。(见网站) ④如果还是不行,则需要在安装输入sudo apt-get
update更新源,再重新输入安装指令。 注2:关于为什么本人包只有12mb,而部分人的离线包在170mb的原因:
(1)有时候安装不需要sudo apt-get update,这样就不会下载额外的deb包。
(2)建议在线机器先右上角的系统设置/软件安全与更新,更新频率设置为从不。否则有时候文件夹/计算机/var/archives会额外缓存很多版本更新的deb包(100+MB)比较占空间。
1.插入U盘或光盘,将offlinePackage.tar.gz复制到根目录下,解压
sudo tar -xvf offlinePackage.tar.gz
2.将安装包所在和源路径添加到系统源source.list
注意:我们在添加之前可以先将原来的源备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.back
以备以后使用
sudo vi /etc/apt/sources.list
deb [trusted=true] file:/// offlinePackage/
然后将所有的其他deb全部注销掉(#),注:deb file:// /offlinePackage/后无需加archives/
sudo apt-get update
可能会提示执行apt --fix-broken install
。执行即可。这是因为一般是使用dpkg安装软件出现依赖或者源找不到的情况,会提示使用这个命令来解决依赖,删除半安装的软件,因为不使用这个软件,使用 apt update或者apt upgrade将不能成功。
4.离线安装
此时,在没有网络的情况下,我们就可以安装我们之间下载的XXXX软件了
sudo apt-get install -y XXXXX --allow-unauthenticated #--allow-unauthenticated相当于增加私人下载权限
注意:
兼容性问题,如果我们制作安装包时,用的是64位的ubuntu,那么该离线包只能在其他64位系统上安装。
有些软件对ubuntu server和ubuntu desktop版也不兼容。总之,在什么系统下制作的离线包,就在什么系统下安装。
在之后的使用中,安装了vcs eda仿真工具,并安装了iptables这个防火墙工具来打开270000端口,不过好像把其他的端口都关闭了,导致vncviewer连接不上。
解决方法就是使用iptables打开指定的端口,或者打开所有的端口、之后就可以连接到服务器了。
# 打开指定的端口5901
sudo /sbin/iptables -I INPUT 1 -p TCP --dport 5901 -j ACCEPT
# 或打开一段端口
sudo /sbin/iptables -I INPUT 1 -p TCP --dport 5900:5999 -j ACCEPT
# 或Linux之iptables打开所有进/出端口:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
完成上述命令我们就完成了开放指定的端口,但是如果此时ubutnu服务器重启,上述规则就没有了(centos系统重启后规则不会消失),所以我们需要对规则进行一下持续化操作
持续化规则
这里我们需要在安装一下工具来帮我们实现,这里我们使用 iptables-persistent
安装iptables-persistent
sudo apt-get install iptables-persistent
持久化规则
sudo netfilter-persistent save
sudo netfilter-persistent reload
完成上述操作就可以永久打开我们需要的端口了。
以上为本人的简单总结,参考的博客已经在开头说明。
其中可能会存在一些不正确的地方,希望大佬们多多指正!