ubuntu安装、查看已安装包的方法(转)

 ubuntu  ubuntu安装、查看已安装包的方法(转)已关闭评论
9月 162021
 

网上发现的一篇很好的关于ubuntu下查看或安装包的方法的文章,转载分享下,原文链接见文末。

 

说明:由于图形化界面方法(如Add/Remove… 和Synaptic Package Manageer)比较简单,所以这里主要总结在终端通过命令行方式进行的软件包安装、卸载和删除的方法。

一、Ubuntu中软件安装方法

1、APT方式

(1)普通安装:apt-get install softname1 softname2 …;

(2)修复安装:apt-get -f install softname1 softname2… ;(-f Atemp to correct broken dependencies)

(3)重新安装:apt-get –reinstall install softname1 softname2…;

2、Dpkg方式

(1)普通安装:dpkg -i package_name.deb

3、源码安装(.tar、tar.gz、tar.bz2、tar.Z)

首先解压缩源码压缩包然后通过tar命令来完成

a.解xx.tar.gz:tar zxf xx.tar.gz
b.解xx.tar.Z:tar zxf xx.tar.Z
c.解xx.tgz:tar zxf xx.tgz
d.解xx.bz2:bunzip2 xx.bz2
e.解xx.tar:tar xf xx.tar

然后进入到解压出的目录中,建议先读一下README之类的说明文件,因为此时不同源代码包或者预编译包可能存在差异,然后建议使用ls -F –color或者ls -F命令(实际上我的只需要 l 命令即可)查看一下可执行文件,可执行文件会以*号的尾部标志。

一般依次执行./configure

make

sudo make install

即可完成安装。

二、Ubuntu中软件包的卸载方法

1、APT方式

(1)移除式卸载:apt-get remove softname1 softname2 …;(移除软件包,当包尾部有+时,意为安装)

(2)清除式卸载 :apt-get –purge remove softname1 softname2…;(同时清除配置)

清除式卸载:apt-get purge sofname1 softname2…;(同上,也清除配置文件)

2、Dpkg方式

(1)移除式卸载:dpkg -r pkg1 pkg2 …;

(2)清除式卸载:dpkg -P pkg1 pkg2…;

 

三、Ubuntu中软件包的查询方法

Dpkg 使用文本文件来作为数据库.通称在 /var/lib/dpkg 目录下. 通称在 status 文件中存储软件状态,和控制信息. 在 info/ 目录下备份控制文件, 并在其下的 .list 文件中记录安装文件清单, 其下的 .mdasums 保存文件的 MD5 编码.

体验使用数据库的时刻到了:

$ dpkg -l Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-===========-================-======================================== ii aalib1 1.4p5-28 ascii art library - transitional package ii adduser 3.85 Add and remove users and groups ii alien .63 install non-native packages with dpkg ... ... 

每条记录对应一个软件包, 注意每条记录的第一, 二, 三个字符. 这就是软件包的状态标识, 后边依此是软件包名称, 版本号, 和简单描述.

  • 第一字符为期望值,它包括:
    • u 状态未知,这意味着软件包未安装,并且用户也未发出安装请求.
    • i 用户请求安装软件包.
    • r 用户请求卸载软件包.
    • p 用户请求清除软件包.
    • h 用户请求保持软件包版本锁定.
  • 第二列,是软件包的当前状态.此列包括软件包的六种状态.
    • n 软件包未安装.
    • i 软件包安装并完成配置.
    • c 软件包以前安装过,现在删除了,但是它的配置文件还留在系统中.
    • u 软件包被解包,但还未配置.
    • f 试图配置软件包,但是失败了.
    • h 软件包安装,但是但是没有成功.
  • 第三列标识错误状态,可以总结为四种状态. 第一种状态标识没有问题,为空. 其它三种符号则标识相应问题.
    • h 软件包被强制保持,因为有其它软件包依赖需求,无法升级.
    • r 软件包被破坏,可能需要重新安装才能正常使用(包括删除).
    • x 软包件被破坏,并且被强制保持.

也可以以统配符模式进行模糊查询, 比如我要查找以nano字符开始的所有软件包:

$ dpkg -l nano* Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-==============-==============-============================================ ii nano 1.3.10-2 free Pico clone with some new features pn nano-tiny <none> (no description available) un nanoblogger <none> (no description available) 

以上状态说明: 系统中安装了 nano 版本为 1.3.10-2 ;安装过 nano-tiny , 后来又清除了; 从未安装过nanoblogger .

如果觉得 dpkg 的参数过多, 不利于记忆的话, 完全可以使用 dpkg-query 进行 dpkg 数据库查询.

应用范例:

  • 查询系统中属于nano的文件:

    $ dpkg –listfiles nano

    or

    $ dpkg-query -L nano

  • 查看软件nano的详细信息:

    $ dpkg -s nano

    or

    $ dpkg-query -s nano

  • 查看系统中软件包状态, 支持模糊查询:

    $ dpkg -l

    or

    $dpkg-query -l

  • 查看某个文件的归属包:

    $ dpkg-query -S nano

    or

    $ dpkg -S nano

三、其他应用总结

apt-cache search # ——(package 搜索包)
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
apt-get install # ——(package 安装包)
apt-get install # —–(package –reinstall 重新安装包)
apt-get -f install # —–(强制安装, “-f = –fix-missing”当是修复安装吧…)
apt-get remove #—–(package 删除包)
apt-get remove –purge # ——(package 删除包,包括删除配置文件等)
apt-get autoremove –purge # —-(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
apt-get update #——更新源
apt-get upgrade #——更新已安装的包
apt-get dist-upgrade # ———升级系统
apt-get dselect-upgrade #——使用 dselect 升级
apt-cache depends #——-(package 了解使用依赖)
apt-cache rdepends # ——(package 了解某个具体的依赖,当是查看该包被哪些包依赖吧…)
apt-get build-dep # ——(package 安装相关的编译环境)
apt-get source #——(package 下载该包的源代码)
apt-get clean && apt-get autoclean # ——–清理下载文件的存档 && 只清理过时的包
apt-get check #——-检查是否有损坏的依赖
dpkg -S filename —–查找filename属于哪个软件包
apt-file search filename —–查找filename属于哪个软件包
apt-file list packagename —–列出软件包的内容
apt-file update –更新apt-file的数据库

dpkg –info “软件包名” –列出软件包解包后的包名称.
dpkg -l –列出当前系统中所有的包.可以和参数less一起使用在分屏查看. (类似于rpm -qa)
dpkg -l |grep -i “软件包名” –查看系统中与”软件包名”相关联的包.
dpkg -s 查询已安装的包的详细信息.
dpkg -L 查询系统中已安装的软件包所安装的位置. (类似于rpm -ql)
dpkg -S 查询系统中某个文件属于哪个软件包. (类似于rpm -qf)
dpkg -I 查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).
dpkg -i 手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.
dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.
dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)
dpkg -reconfigure 重新配置

apt-get install
下载软件包,以及所有依赖的包,同时进行包的安装或升级。如果某个包被设置了 hold (停止标志,就会被搁在一边(即不会被升级)。更多 hold 细节请看下面。
apt-get remove [–purge]
移除 以及任何依赖这个包的其它包。
–purge 指明这个包应该被完全清除 (purged) ,更多信息请看 dpkg -P。

apt-get update
升级来自 Debian 镜像的包列表,如果你想安装当天的任何软件,至少每天运行一次,而且每次修改了
/etc/apt/sources.list 後,必须执行。

apt-get upgrade [-u]
升 级所有已经安装的包为最新可用版本。不会安装新的或移除老的包。如果一个包改变了依赖关系而需要安装一个新的包,那么它将不会被升级,而是标志为 hold。apt-get update 不会升级被标志为 hold 的包 (这个也就是 hold 的意思)。请看下文如何手动设置包为 hold。我建议同时使用 ‘-u’ 选项,因为这样你就能看到哪些包将会被升级。

apt-get dist-upgrade [-u]
和 apt-get upgrade 类似,除了 dist-upgrade 会安装和移除包来满足依赖关系。因此具有一定的危险性。

apt-cache search
在软件包名称和描述中,搜索包含xxx的软件包。

apt-cache show
显示某个软件包的完整的描述。

apt-cache showpkg
显示软件包更多细节,以及和其它包的关系。

dselect
console-apt
aptitude
gnome-apt
APT 的几个图形前端(其中一些在使用前得先安装)。这里 dselect 无疑是最强大的,也是最古老,最难驾驭。

普通 Dpkg 用法
dpkg -i
安装一个 Debian 包文件,如你手动下载的文件。

dpkg -c
列出 的内容。

dpkg -I
从 中提取包信息。

dpkg -r
移除一个已安装的包。

dpkg -P
完全清除一个已安装的包。和 remove 不同的是,remove 只是删掉数据和可执行文件,purge 另外还删除所有的配制文件。

dpkg -L
列出 安装的所有文件清单。同时请看 dpkg -c 来检查一个 .deb 文件的内容。

dpkg -s
显示已安装包的信息。同时请看 apt-cache 显示 Debian 存档中的包信息,以及 dpkg -I 来显示从一个 .deb 文件中提取的包信息。

dpkg-reconfigure
重 新配制一个已经安装的包,如果它使用的是 debconf (debconf 为包安装提供了一个统一的配制界面)。你能够重新配制 debconf 它本身,如你想改变它的前端或提问的优先权。例如,重新配制 debconf,使用一个 dialog 前端,简单运行:

dpkg-reconfigure –frontend=dialog debconf (如果你安装时选错了,这里可以改回来哟:)

echo ” hold” | dpkg –set-selections
设置 的状态为 hlod (命令行方式)

dpkg –get-selections “”
取的 的当前状态 (命令行方式)

支持通配符,如:
Debian:~# dpkg –get-selections *wine*
libwine hold
libwine-alsa hold
libwine-arts hold
libwine-dev hold
libwine-nas hold
libwine-print hold
libwine-twain hold
wine hold
wine+ hold
wine-doc hold
wine-utils hold

例如:
大家现在用的都是 gaim-0.58 + QQ-plugin,为了防止 gaim 被升级,我们可以采用如下方法:

方法一:
Debian:~# echo “gaim hold” | dpkg –set-selections
然後用下面命令检查一下:
Debian:~# dpkg –get-selections “gaim”
gaim hold
现在的状态标志是 hold,就不能被升级了。

如果想恢复怎么办呢?
Debian:~# echo “gaim install” | dpkg –set-selections
Debian:~# dpkg –get-selections “gaim”
gaim install
这时状态标志又被重置为 install,可以继续升级了。

同志们会问,哪个这些状态标志都写在哪个文件中呢?
在 /var/lib/dpkg/status 里,你也可以通过修改这个文件实现 hold。

有时你会发现有的软件状态标志是 purge,不要奇怪。
如:事先已经安装了 amsn,然後把它卸了。
apt-get remove –purge amsn
那么状态标志就从 install 变成 purge。

方法二:
在/etc/apt 下手动建一个 preferences 文件
内容:
Package: gaim
Pin: version 0.58*
保存

dpkg -S
在包数据库中查找 ,并告诉你哪个包包含了这个文件。(注:查找的是事先已经安装的包)

——————————————–
Debian的软件包管理工具命令不完全列表
——————————————–
Debian系统中所有的包信息都在/var/lib/dpkg下.其中/var/lib/dpkg/info目录中保存了各个软件包的信息及管理文件.每个文件的作用如下:
以 “.conffiles”     结尾的文件记录软件包的配置列表.
以 “.list”          结尾的文件记录了软件包的文件列表,用户可在文件当中找到软件包文件的具体安装位置.
以 “.md5sums”       结尾的文件记录了md5信息,用来进行包的验证的.
以 “.config”        结尾的文件是软件包的安装配置角本.
以 “.postinst”      角本是完成Debian包解开之后的配置工作,通常用来执行所安装软件包相关的命令和服务的重新启动.
以 “.preinst”       角本在Debain解包之前运行,主要作用是是停止作用于即将升级的软件包服务直到软件包安装或和升级完成.
以 “.prerm”         脚本负责停止与软件包关联的daemon服务,在删除软件包关联文件之前执行.
以 “.postrm”        脚本负责修改软件包链接或文件关联,或删除由它创建的文件.

/var/lib/dpkg/available是软件包的描述信息.
包括当前系统中所有使用的Debian安装源中所有的软件包,还包括当前系统中已经安装和未安装的软件包.

1.dpkg包管理工具

dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.
dpkg –info “软件包名” –列出软件包解包后的包名称.
dpkg -l     –列出当前系统中所有的包.可以和参数less一起使用在分屏查看.
dpkg -l |grep -i “软件包名” –查看系统中与”软件包名”相关联的包.
dpkg -s   查询已安装的包的详细信息. dpkg -L   查询系统中已安装的软件包所安装的位置.
dpkg -S   查询系统中某个文件属于哪个软件包.
dpkg -I   查询deb包的详细信息,在一个软件包下载到本地之后看看用不用安装(看一下呗).
dpkg -i 手动安装软件包(这个命令并不能解决软件包之前的依赖性问题),如果在安装某一个软件包的时候遇到了软件依赖的问题,可以用apt-get -f install在解决信赖性这个问题.
dpkg -reconfigure 重新配置
dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)

 

2. apt高级包管理工具
(1)GTK图形的”synaptic”,这是APT的前端工具.
(2)”aptitude”,这也是APT的前端工具.
用APT管理工具进行包的管理,可以有以下几种方法做源:
(1)拿安装盘做源,方法如下:
apt-cdrom ident        扫描光盘的信息
apt-cdrom add          添加光盘源
(2)这也是最常用的方法就是把源添加到/etc/apt/source.list中,之后更新列apt-get update

APT管理工具常用命令
apt-cache 加上不同的子命令和参数的使用可以实现查找,显示软件,包信息及包信赖关系等功能.
apt-cache stats 显示当前系统所有使用的Debain数据源的统计信息.
apt-cache search +”包名”,可以查找相关的软件包.
apt-cache show   +”包名”,可以显示指定软件包的详细信息.
apt-cache depends +”包名”,可以查找软件包的依赖关系.
apt-get upgrade   更新系统中所有的包到最新版
apt-get install   安装软件包
apt-get –reindtall install 重新安装软件包
apt-get remove 卸载软件包
apt-get –purge remove 完全卸载软件包
apt-get clean 清除无用的软件包
在用命令apt-get install之前,是先将软件包下载到/var/cache/apt/archives中,之后再进行安装的.所以我们可以用apt-get clean清除/var/cache/apt/archives目录中的软件包.

源码包安装
apt-cache showsrc 查找看源码包的文件信息(在下载之前)
apt-get source 下载源码包.
apt-get build-dep +”包名” 构建源码包的编译环境.

 

清除处于rc状态的软件包

dpkg -l |grep ^rc|awk ‘{print $2}’ |tr [“\n”] [” “] | sudo xargs dpkg -P –

 

转自: http://www.cnblogs.com/forward/archive/2012/01/10/2318483.html

 

python 2.7.x 安装 pip

 pip, python  python 2.7.x 安装 pip已关闭评论
6月 152021
 

一般Python 2 >=2.7.9的版本都自带了pip,但有些时候因为这样那样的原因卸载了pip模块,可以使用下面的方式安装(先下载get-pip.py文件,再安装):

1. 如果python是 2.7.x版本

[[email protected] o-u-u]# curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py & python get-pip.py

或:

python -m ensurepip –default-pip 

 

2. python >=3.6

[[email protected] o-u-u]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py & python get-pip.py

 

“此版本…不能安装在这台电脑上”问题解决,旧/老Mac如何安装通过patch包安装不兼容的High Sierra, Mojave,Catalina系统

 mac, macpro  “此版本…不能安装在这台电脑上”问题解决,旧/老Mac如何安装通过patch包安装不兼容的High Sierra, Mojave,Catalina系统已关闭评论
3月 282021
 

老版的macpro , 比如2011年的版本正常升级系统只能支持到High Sierra, 而无法安装Mojave,Catalina系统, 但实际老硬件支持这些系统毫无压力,如果还换过固态硬盘的话,运行新操作系统更是绰绰有余,那如何升级呢?

老外做了一些补丁包,可以从以下址http://dosdude1.com/software.html下载到对应的包。

 

我们以安装mojave patch为例,以下所有的内容都可以在它的网页上找到(http://dosdude1.com/mojave/),我只是翻译成了中文,便于大家阅读:

 

具体步骤如下:

一、前提条件:

  1. 下载好对应的 mojave patch.
  2. 准备一个U盘,最好16G以上,
  3. macOS Mojave安装程序应用程序的副本。可以使用支持Mojave的机器从Mac App Store获得此信息,也可以使用mojave patch该工具的内置下载功能获得该信息。在菜单栏中,只需选择“工具>下载macOS Mojave …”http://dosdude1.com/mojave/tutorialimages/downloadMacOS.png

 

二、使用方法:

重要说明: 如果您有一台本机支持High Sierra的计算机,则要从APFS卷启动,必须​​确保安装了系统的最新版本的BootROM。如果您以前未安装High Sierra,您可以下载并安装这个软件包以安装最新的BootROM版本。安装时,请确保系统已接通电源,否则将不会安装更新。

1.插入所需的USB驱动器,打开“磁盘工具”,然后将其格式化为OS X扩展(日志式)。

2.打开“ macOS Mojave Patcher”工具,然后浏览以找到macOS Mojave Installer应用程序的副本。

*确保该工具成功验证了应用程序。

3.接下来,在“目标卷”列表中选择您的USB驱动器,然后单击“开始操作”。

4.操作完成后,通过在打开计算机电源的同时按住Option键并选择驱动器,从刚创建的USB驱动器上启动目标不受支持的Mac。


注意:如果要进行全新安装,请仅执行步骤5和6。否则,您只需跳过这些步骤并安装到包含OS X早期版本的卷中,它将进行就地升级。

5.安装程序启动后,从“实用工具”菜单中打开“磁盘实用工具”,或者在屏幕左下角的“实用工具”窗口中双击它。

6.选择要安装在其上的磁盘或分区,然后将其擦除,以确保使用Mac OS Extended(日志式)或APFS作为文件系统类型。如果格式化整个驱动器,请确保已选择GUID。

重要的提示:  Mojave中要求使用APFS,以便通过常规软件更新方法接收系统更新。如果您选择继续使用macOS Extended(Journaled)作为文件系统类型,则不会通过系统偏好设置接收系统更新。

•在2009年末及以后的计算机上使用APFS的工作方式与High Sierra相同。
•如果您的机器本身不支持High Sierra(因此无法自然启动APFS卷),请注意以下几点:

—如果使用APFS,将没有可启动的恢复分区。
—如果您决定使用APFS,则安装后的工具将安装自定义启动方法,因为这些不受支持的计算机的固件本身不支持从APFS卷启动。它不像本机启动那样干净,但是在运行Mojave时不会引起任何问题。修改后的启动过程的演示可以在这里查看。

7.将macOS正常安装到所需的卷上。

8.安装完成后,重新引导回安装程序驱动器。这次,打开“ macOS Post Install”应用程序。

9.在应用程序中,选择您正在使用的Mac型号(如果不清楚型号的,可以点击mac左上角苹果图标,点击 “关于本机”  –> “概览” –> “系统报告……” –> “硬件”, 在“硬件概览”下的“型号标识符“就是我们要找的信息)。将根据您选择的模型为您选择最佳的补丁。您还可以选择其他补丁。

10.选择刚刚在其上安装了macOS Mojave的卷,然后单击“修补程序”。完成修补后,单击“重新启动”。在重新启动之前,它可能会坐在那里片刻来重建缓存。
•如果由于某种原因,系统在重新引导后无法正常运行,请重新引导至安装程序驱动器,再次运行安装后修补程序,然后在重新引导之前选择“强制缓存重建”。在大多数情况下,这不是必需的。

11.重新启动后,它现在应该启动到macOS Mojave的完全正常工作的副本中。

附加信息:

•如果在macOS后期安装工具中选择了Mojave,则您的Mojave安装将在/ Applications / Utilities文件夹中有一个名为“ Patch Updater”的程序。当您的计算机有可用的补丁程序新更新时,此程序将提醒您,并提示您安装它们。如果您没有安装补丁更新程序,但是想要安装它,则可以下载并运行此处找到的脚本。

•在系统更新期间,某些补丁可能会被覆盖。使用补丁更新程序工具,可以一键式重新安装这些补丁。为此,请打开Patch Updater应用程序,然后选择“查看已安装的更新”,或使用菜单栏中的“查看>显示已安装的更新”菜单。
•要重新安装补丁,只需在列表中右键单击它,然后选择“重新安装”。您也可以选择“全部重新安装”按钮,以立即重新安装所有当前已安装的修补程序。

更新

重要说明:

    • Mojave中要求使用APFS,以便通过常规软件更新方法接收系统更新。如果您选择继续使用macOS Extended(Journaled)作为文件系统类型,则不会通过系统偏好设置接收系统更新。如果您不使用APFS,则可以按照以下10.14.1的安装步骤进行操作。

 

  • 通过软件更新应用任何系统更新后,很有可能需要使用Mojave Patcher安装程序卷重新应用安装后补丁。如果您安装软件更新,但系统随后无法启动,则需要执行此操作。

 

macOS 10.15 系统任何来源已打开,软件显示损坏解决方案(转)

 mac  macOS 10.15 系统任何来源已打开,软件显示损坏解决方案(转)已关闭评论
3月 262021
 

更新 macOS 10.15 Catalina 系统后,许多在 10.14 上可以使用的 App 都会提示【 xxx 已损坏,无法打开,你应该将它移到废纸篓解决办法 】,哪怕你在【安全与隐私 > 通用】中已经开启了【任何来源】,但还是会出现这样提示,接下来小编为大家带来详细的修复的方法,感兴趣的朋友快跟着小编一起来看看吧!

准备工作:检查是否已开启【任何来源】,已开启的请忽略准备工作

先打开系统偏好设置,检查 【安全与隐私】 -> 【通用选项卡】下是否已经启用了任何来源选项:

如果没有打开【任何来源】选项,请参考教程:https://www.kkmac.com/help-mac-888.html

重要提示:首先你要先打开【任何来源】选项,再进行接下来的操作!

现在教程正式开始:

1、打开 「Launchpad」 – 「实用工具」 – 「终端」;

2.将下面这段代码复制,在终端窗口粘贴。

sudo xattr -d com.apple.quarantine 

注意 代码的 quarantine 后面有个空格,要一起复制进终端

打开 Finder(访达),点击左侧的应用程序,将应用拖进终端中按下回车

然后按键盘的回车键(return),输入密码,再按回车键,完成。

回车后会看见个 password 后面还有个钥匙图标,在钥匙图标后面输入你自己电脑解锁密码

输入的时候不显示你输入的密码,感觉就是输入不了东西一样,也不用管,凭感觉输入完正确解锁密码后按回车键。

好了再看一下是不是可以打开 APP 了!

最后补充

如果以上方法都不能解决,就只能关闭 SIP 系统完整性保护了!!!

详细请参考:https://www.kkmac.com/macos-gb-sip.html

 

转自: https://www.kkmac.com/mac-81112.html

macOS安装过程中“应用副本已损坏,不能用来安装macOS….”的解决方案

 mac, macpro  macOS安装过程中“应用副本已损坏,不能用来安装macOS….”的解决方案已关闭评论
2月 262021
 

今天在给一个旧mac安装os时,使用u 盘启动安装时提示下面错误“应用副本已损坏,不能用来安装macOS….“ , 后来网上查到: 大部分原因是由于系统版本证书过期所致。我们可以这样操作,解决上述问题。

先点击“好”关闭窗口,我们先关闭网络,关闭网络,关闭网络(断开wifi,拔网线等),在准备安装界面中点击工具栏“实用工具”—“终端”,进入终端

进入终端后,我们输入以下命令行“date 062614102014.30”,注意,date后面是空格,输完之后按回车确定。(其他版本日期参照教程结尾)

命令行输完之后,关闭窗口,退出终端。

退出之后,我们点击“安装macOS”,看一下能否进下一步。

我们顺利得进入了安装界面。

其他事项

一、在桌面环境升级系统时,同样先关闭网络,打开“终端”,输入日期前加入”sudo”,例如“sudo date 062614102014.30”(不包括引号),按回车,关闭终端之后再执行升级操作。

二、如果上面的命令行不起作用。我们可以更改成其他日期再试一遍

date 0201010116(OS X El Capitan 10.11.6适用)

date 010514102017.30(macOS Sierra 10.12适用)

date 062614102014.30 (10.13、10.14适用)

date 121212122019 (10.15)

date 032208102015.20

date 112202022015

date 122014102015.30(10.10可用)

nginx搭建rtmp服务器(原有nginx上添加模块方式)及让nginx支持HLS

 nginx  nginx搭建rtmp服务器(原有nginx上添加模块方式)及让nginx支持HLS已关闭评论
1月 122021
 

转自:https://www.cnblogs.com/HintLee/p/9499429.html

参考:   https://www.jianshu.com/p/089b70f57bca

前言

最近接手了一个跟视频监控相关的项目,用了近年来越来越流行的 Web 服务器 nginx 加上 nginx-rtmp-module 搭建 rtmp 服务器。使用了阿里云的服务器,系统 Ubuntu 16.04 。

步骤

更新源并安装 nginx 。

sudo apt-get update
sudo apt-get install nginx

一、 支持RTMP

输入 nginx -V 查看 nginx 版本,可以看到当前版本号是 1.10.3,且可以看到编译选项。所以下一步要做的是下载相同版本的 nginx 源码,使用相同的编译选项并添加 nginx-rtmp-module,替换原来的 nginx 。
下载 nginx 1.10.3 的源码和 nginx-rtmp-module 的源码。

wget https://nginx.org/download/nginx-1.10.3.tar.gz
tar zxvf nginx-1.10.3.tar.gz
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
cp -r nginx-rtmp-module nginx-1.10.3

在第 3 步中可以得知安装的 nginx 的编译选项,所以套用这些编译选项,在上一步已经把 nginx-rtmp-module 复制到 nginx 源码目录,所以在结尾添加 –add-module=./nginx-rtmp-module 。在 nginx-1.10.3 目录执行以下命令:

./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=./nginx-rtmp-module

上一步执行后可能会提示以下几个错误,需安装相关软件包,然后再次执行步骤 5 的命令。

./configure: error: the HTTP rewrite module requires the PCRE library.
./configure: error: SSL modules require the OpenSSL library.
./configure: error: the HTTP XSLT module requires the libxml2/libxslt
./configure: error: the HTTP image filter module requires the GD library.
./configure: error: the GeoIP module requires the GeoIP library.
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install openssl libssl-dev
sudo apt-get install libxml2 libxml2-dev libxslt-dev
sudo apt-get install libgd2-xpm-dev
sudo apt-get install libgeoip-dev

上一步执行完成后 make,等待 nginx 编译完成。编译过程可能会出现 error: macro “DATE” might prevent reproducible builds 错误,在 CFLAGS 中添加 -Wno-error=date-time 参数即可,也就是步骤5的命令改成

./configure --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -Wno-error=date-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=./nginx-rtmp-module

编译完成后,在 objs 目录下会有 nginx 的可执行文件。首先停止 nginx 服务,替换掉 nginx 。

sudo service nginx stop
cd /usr/sbin
sudo mv nginx nginx.bak
sudo cp ~/nginx-1.10.3/objs/nginx ./

修改 /etc/nginx/nginx.conf,在结尾添加使其开启 nginx-rtmp-module 相关的功能。

rtmp {
        server {
                listen 1935;
                chunk_size 4000;
                application live {
                        live on;
                }
        }
}

执行 sudo service nginx restart 重启 nginx 服务,然后执行 netstat -a|grep 1935,可以看到 1935 端口处于 LISTEN 状态,即可向 nginx 推流。更多强大的功能可以查看 nginx-rtmp-module

 

二、 支持HLS

找到rtmp 修改下面这个地方

rtmp {
    server {
        listen 1935;
        application live {
            live on;
            record off;
        }
 
        # HLS
 
        # For HLS to work please create a directory in tmpfs (/tmp/hls here)
        # for the fragments. The directory contents is served via HTTP (see
        # http{} section in config)
        #
        # Incoming stream must be in H264/AAC. For iPhones use baseline H264
        # profile (see ffmpeg example).
        # This example creates RTMP stream from movie ready for HLS:
        #
        # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264
        #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
        #    -f flv rtmp://localhost:1935/hls/movie
        #
        # If you need to transcode live stream use 'exec' feature.
        #
        application hls {
            live on;
            hls on;
            hls_path /usr/local/var/www/hls;
        }
 
        # MPEG-DASH is similar to HLS
 
        application dash {
            live on;
            dash on;
            dash_path /tmp/dash;
        }
    }
 } 
保存配置文件,重新加载nginx配置

nginx -s reload

2.进行推流测试(使用ffmpeg,安装见最后)

ffmpeg -loglevel verbose -re -i /Data/Movies/Demo.mov  -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/hls/movie

然后你就可以在这个目录
/usr/local/var/www/hls
看到生成一个个ts的文件,还会生成一个movie.m3u8的文件

在Safari里输入地址查看视频(需要等movie.m3u8文件生成后),也可以用iPad或者iPhone上的Safari来访问(其他设备记得需要把localhost改为nginx的ip地址)
http://localhost:8080/hls/movie.m3u8

附:
ffmpeg安装:

Ubuntu

Ubuntu 中安装比较简单,直接使用 apt 安装即可

1
$ sudo apt install -y ffmpeg

CentOS

CentOS 中则比较麻烦,需要使用源码安装

下载并解压

1
2
3
$ wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
$ tar -xjvf ffmpeg-4.1.tar.bz2
$ cd ffmpeg-4.1

编译

1
2
$ ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

可以使用 --disable-x86asm 参数略过该配置或者直接安装

1
$ sudo yum install -y yasm

也可以从官网下载源码安装

随后再次编译安装即可

1
2
$ ./configure
$ sudo make && sudo make install

安装pyOpenSSL == 0.13.x时提示“OpenSSL/crypto/crl.c:6:23: error: static declaration of ‘X509_REVOKED_dup’ follows non-static declaration static X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *orig)”解决方式

 pip  安装pyOpenSSL == 0.13.x时提示“OpenSSL/crypto/crl.c:6:23: error: static declaration of ‘X509_REVOKED_dup’ follows non-static declaration static X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *orig)”解决方式已关闭评论
12月 242020
 

今天需要安装老的0.13版本的pyOpenSSL时出现下面错误“

OpenSSL/crypto/crl.c:6:23: error: static declaration of ‘X509_REVOKED_dup’ follows non-static declaration
static X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *orig)”

 

结合网上资料可以使用下面的步骤即可完成安装:

1.#新建一个目录build

[[email protected]] mkdir build

[[email protected]] cd build

 

2. #然后下载pyOpenSSL==0.13的源码,解压后
[[email protected]] pip download pyOpenSSL==0.13
[[email protected]] tar xzf pyOpenSSL-0.13.tar.gz

 

3.#修改OpenSSL/crypto/crl.c文件
[[email protected]] cd pyOpenSSL-0.13

[[email protected]] vi OpenSSL/crypto/crl.c

找到这一行
static  X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *orig) {

删除static,修改为:

X509_REVOKED * X509_REVOKED_dup(X509_REVOKED *orig) {

 

4.#然后再安装

[[email protected]] pip install –no-clean .

 

DONE!!!

centos 7 安装 mysql 5.7 及问题总结

 mysql  centos 7 安装 mysql 5.7 及问题总结已关闭评论
12月 242020
 

centos 7中默认没有mysql 的rpm安装包,需要自己添加

在 https://dev.mysql.com/downloads/repo/yum/ 找到 yum 源 rpm 最新的安装包。

我们只下载mysql 5.7的

# 下载
shell> wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装 mysql 源
shell> yum localinstall mysql57-community-release-el7-11.noarch.rpm  # 或者 使用 rpm -ivh mysql57-community-release-el7-11.noarch.rpm

#安装mysql

shell> yum install -y mysql-community-server

#启动mysql

shell> systemctl start mysqld

#查看状态

shell> systemctl status mysqld

#设置开机启动
shell> systemctl enable mysqld
# 重载所有修改过的配置文件
shell> systemctl daemon-reload

#修改root本地账户密码
#mysql安装完成之后,生成的默认密码在 /var/log/mysqld.log 文件中。使用 grep 命令找到日志中的密码。
#shell> grep ‘temporary password’ /var/log/mysqld.log
#首次通过初始密码登录后,使用以下命令修改密码, 或使用 mysql_secure_installation命令也可以按提示修改
shell> mysql -uroot -p
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘NewPassword’;

##问题汇总:
1. mysql 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误
#解决方法,将密码强度改为LOW
#0 or LOW #1 or MEDIUM #2 or STRONG
#在mysql终端下运行:
mysql> set global validate_password_policy=0;
#默认都要求密码8位以上,可以使用下列命令修改长度为4
mysql> set global validate_password_length=4;

2. telnet mysql时出现:is not allowed to connect to this MySQL serverConnection closed by foreign host
#解决方法
#在mysql终端下运行:(%表示所有ip,如果要求本机适用localhost或ip地址代替)
mysql> grant all privileges on *.* to ‘root’@’%’ identified by ‘123456’;
#使授权生效
mysql> flush privileges;

3. mysql 安装后默认不支持中文,需要修改编码。
#修改 /etc/my.cnf 配置文件,在相关节点(没有则自行添加)下添加编码配置,如下:

[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#重启mysql服务,查询编码。可以看到已经改过来了

shell> systemctl restart mysqld
shell> mysql -uroot -p
mysql> show variables like ‘character%’;

 

 

 

mac新系统下使用pip安装模块时提示”Could not install packages due to an EnvironmentError” 问题解决

 python  mac新系统下使用pip安装模块时提示”Could not install packages due to an EnvironmentError” 问题解决已关闭评论
12月 112020
 

mac使用pip安装 pytorch时提示:” Could not install packages due to an EnvironmentError”

其实现在mac新系统不再允许直接操作根目录下文件,所以pip安装模块时经常提示这个,可以在pip安装时添加  –user  参数

比如:

pip install –user torch torchvision torchaudio

 

加 –user 的作用是显式指定安装在用户自己的工作空间而非全局的里。

DONE!

Mac 安装Jupyter Notebook并支持python 自动补全(自定义端口,密码访问)

 python  Mac 安装Jupyter Notebook并支持python 自动补全(自定义端口,密码访问)已关闭评论
12月 082020
 

一、安装运行:

  • pip3 install jupyter
  • jupyter notebook —generateconfig   (生成配置文件)
    • $ jupyter notebook –generate-config
    • Writing default config to: /Users/xxxxxx/.jupyter/jupyter_notebook_config.py
  • 生成jupyter 密码:
      • 方法一(one): 直接jupyter notebook password , 两次确认后直接写入配置文件(

        /Users/xxxxxx/.jupyter/jupyter_notebook_config.json

        ),完成。

      • 方法二(another):python命令行下执行
      • # 此时需要输入两次密码(一次设置,一次确认),然后生成sha1的密文,需拷贝下来填写到jupyter_notebook_config.py文件里
      • >>> from notebook.auth import passwd

        >>> passwd()

        Enter password:

        Verify password:

        ‘argon2:$argon2id$v=19$m=10240,t=10,p=8$LrRgSOg35ZZepMQiv+pSbQ$2SXyFdqy9vaWseqF7kWZHQ’

         

  • 修改配置文件jupyter_notebook_config.py
    • 在这个配置文件里关注两个:
    • c.NotebookApp.port = 8888  (服务端口,默认8888)

    • c.NotebookApp.password = ‘argon2:$argon2id$v=19$m=10240,t=10,p=8$LrRgSOg35ZZepMQiv+pSbQ$2SXyFdqy9vaWseqF7kWZHQ’    (密码,填入上面产生的密码。如果使用上面方法一产生密码此处都不用修改)

  • 启动jupyter(此处还可以在这里通过参数指定运行的端口,比如8080)
  • nohup jupyter notebook –no-browser —allow-root –ip=0.0.0.0 –port=8080  &

 

二、扩展,自动补全

  • pip3 install jupyter_contrib_nbextensions
  • jupyter contrib nbextension install –user –skip-running-check
  • pip3 install jupyter_nbextensions_configurator
  • 然后重新启动Jupyter Notebook后,就会发现已经有Nbextensions标签了。

常用扩展功能,勾选上即可:

DONE!!!

sublimeREPL下python 2 切换为 python 3

 python, sublime  sublimeREPL下python 2 切换为 python 3已关闭评论
7月 202020
 

转自:https://www.jianshu.com/p/41df9da08f60

1、安装python3

 

$ brew search python
$ brew install python3

这里安装完后不需要单独添加环境变量,程序已经处理好,可以直接运行python3命令。

$ which python
/usr/bin/python

$ which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

$ echo $PATH
/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

2、安装REPL插件,并设置快捷键绑定。

打开后,搜索 SublimeREPL 安装即可。

设置快捷键:

Preferences -> Key Bindings

[   
    {"keys":["f1"],
    "caption": "SublimeREPL: Python - RUN current file",
    "command": "run_existing_window_command", "args":
    {"id": "repl_python_run",
    "file": "config/Python/Main.sublime-menu"}},

    {"keys":["f2"],
    "caption": "SublimeREPL: Python",
    "command": "run_existing_window_command", "args":
    {"id": "repl_python",
    "file": "config/Python/Main.sublime-menu"}}
]

这里我设置的 F1 运行代码,F2 打开终端。

3、按 F2 运行终端,发现默认集成的是 python2,手动改成 pyhton3,方法如下:

$ sudo find / -iname 'Main.sublime-menu'
$ vim /Users/keithtt/Library/Application\ Support/Sublime\ Text\ 3/Packages/SublimeREPL/config/Python/Main.sublime-menu

"cmd": ["python3", "-i", "-u"],
"cmd": ["python3", "-i", "-u", "-m", "pdb", "$file_basename"],
"cmd": ["python3", "-u", "$file_basename"],
"cmd": {
    "osx": ["python3", "-u", "${packages}/SublimeREPL/config/Python/ipy_repl.py"],
    "linux": ["python3", "-u", "${packages}/SublimeREPL/config/Python/ipy_repl.py"],
    "windows": ["python3", "-u", "${packages}/SublimeREPL/config/Python/ipy_repl.py"]
},

将该文件中调用 python 命令的地方全部改成 python3 即可。

改完之后再次按 F2 运行终端,效果如下:

linux下使用自己安装的oracle JDK替换默认的OpenJDK

 java  linux下使用自己安装的oracle JDK替换默认的OpenJDK已关闭评论
4月 272020
 

在linux系统中,由于涉及到版权问题,在大部分linux系统的发行版本中,默认都安装了OpenJDK,并且OpenJDK的java命令也已经加入到环境变量中了。

在刚装好的linux系统中,运行java -version,输出如下(根据JDK版本不同,输出的版本可能不同):

java version “1.7.0_131”
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

但在进行java开发时,我们大多是需要使用Sun(准确的说应该是Oracle)的JDK,所以我们会去Oracle官网下载相应版本的JDK进行安装。

如何在linux上安装,在此不在赘述。

在linux上安装完JDK后,我们会在~/.bash_profile 把安装的java加入到环境变量中。原以为就万事大吉了,在运行java程序时会使用自己安装的JDK。

如果你是这么想的就大错特错了,在文章开头讲的,由于linux系统的发行版中默认安装的时OpenJDK,尽管我们把安装的SunJDK的java命令也加入到环境变量中,但是我们运行

java -version,输出确还是和之前一样:

java version “1.7.0_131”
OpenJDK Runtime Environment (rhel-2.6.9.0.el6_8-x86_64 u131-b00)

这要这么破!!!

一、查找原因

不急,先运行

whereis java,输出如下:
java: /usr/bin/java /etc/java /usr/lib/java /usr/share/java /opt/java/bin/java

在几个地方有java命令,其中/opt/java/bin/java是我自己安装的SunJDK的java命令所在的目录,而/usr/bin/java是系统中默认安装的java命令所在的目录。

原因就在这,

我们执行

ls -la /usr/bin/java,输入如下:

lrwxrwxrwx 1 root root 22 May 14 16:53 /usr/bin/java -> /etc/alternatives/java

一看这是一个软连接,我们cd到/etc/alternatives目录下看个究竟,

然后执行 ls -la,输入比较多,而且很多软链,其中有一个

lrwxrwxrwx  1 root root   46 May 14 18:22 java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

到此,应该明白了,java命令其实指向的是OpenJDK中的java命令,所以才会出现我们把自己安装的SunJDK的java命令配置到环境变量中后,依然不起作用。

所以我们要做的就是需要把java的软链指向我们自己安装的SunJDK的java命令,也即/opt/java/bin/java。

二、使用安装的JDK替代系统默认的OpenJDK

linux中提供了update-alternatives命令,update-alternatives是linux系统(大部分linux系统都支持此命令)中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,而所有的这些就构成了备选方案系统(alternatives system)。

很多时候我们会将拥有相同或相似功能的不同应用程序安装在同一个操作系统上,例如同一个操作系统上的不同文本编辑器。这给了这个系统的用户在编辑文本时有了更多的选择,如果用户愿意他们可以自由选择任意一个来使用。

其实update-alternatives命令的功能很好理解,举个例子:在Window系统中,如果我们安装多个浏览器,比如有火狐、有IE、有360、有Chrome等,当我们从某个链接进去打开网页时,可能会问你使用哪个浏览器,当你选择某个浏览器时,此浏览器会问你是否把它作为默认浏览器,如果你选择了是,那下次点开某个链接时,就直接使用默认浏览器打开了!

现在我们在系统中同时安装了open jdk和sun jdk两个版本,(由于linux发行版本中默认使用OpenJDK的java命令 )而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了。

首先运行以下命令查看java当前的默认配置

update-alternatives –display java,输出如下(后面有省略):
java – status is manual.
link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java – priority 170131
slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/keytool
slave orbd: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/orbd
……

可以从输出中看到系统中java默认使用的OpenJDK,其中数字170131表示优先级。

2.1 下面进入正式配置阶段

1. 把自己安装的SunJDK加入到备选系统中

运行命令(注意命令最后的数字表示优先级,其中170130 为SunJDK的alternative的优先级)

update-alternatives  –install /usr/bin/java java /opt/java/bin/java 170130

2. 选择自己安装的SunJDK作为首选java命令

运行命令

update-alternatives –config java,输出如下

There are 2 programs which provide ‘java’.

Selection    Command
———————————————–
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
2           /opt/java/bin/java

Enter to keep the current selection[+], or type selection number:

config命令是交互式的命令,可以根据提示进行选择,此处我们选择2,即使用安装的SunJDK的java命令,然后按回车键!

至此,配置完成了!

说明:在配置步骤1中,我们指定SunJDK的优先级是170130(比当前优先级170131低),所以需要进行步骤二进行手动选择;如果我们指定的优先级比当前优先级170131高,则步骤二可以省略,系统自动会选择优先级高的作为默认alternative!

关于update-alternatives命令更详细的说明,请参照

1.http://www.cnblogs.com/pengdonglin137/p/3462492.html

2. http://www.mamicode.com/info-detail-1144825.html

3. http://persevere.iteye.com/blog/1479524

原文链接:https://blog.csdn.net/rj042/java/article/details/72034650

POD 指定版本安装

 pod  POD 指定版本安装已关闭评论
1月 192020
 

pod ‘AFNetworking’ //不显式指定依赖库版本,表示每次都获取最新版本
pod ‘AFNetworking’, ‘~>0’ //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

pod ‘AFNetworking’, ‘~> 0.1.2’ //使用大于等于0.1.2但小于0.2的版本
pod ‘AFNetworking’, ‘~>0.1’ //使用大于等于0.1但小于1.0的版本

pod ‘AFNetworking’, ‘2.0’ //只使用2.0版本
pod ‘AFNetworking’, ‘= 2.0’ //只使用2.0版本

pod ‘AFNetworking’, ‘> 2.0’ //使用高于2.0的版本
pod ‘AFNetworking’, ‘>= 2.0’ //使用大于或等于2.0的版本
pod ‘AFNetworking’, ‘< 2.0’ //使用小于2.0的版本
pod ‘AFNetworking’, ‘<= 2.0’ //使用小于或等于2.0的版本

pod ‘AFNetworking’, :git => ‘https://github.com/AFNetworking/AFNetworking.git’, :branch => ‘R20161010’ //指定分支

pod ‘AFNetworking’, :path => ‘../AFNetworking’ //指定本地库

mac os使用tunnelblick作为openvpn客户端

 mac  mac os使用tunnelblick作为openvpn客户端已关闭评论
12月 302019
 

openvpn官网有对应的windows客户端可以下载,但没有mac os的对应版本,而Tunnelblick 是适用于Mac OS X 的OpenVPN Client 的一个GUI 版本,相当好用。

下面介绍下Tunelblick的安装和配置:

1. 安装 Tunnelblick

从以下链接下载和安装 Tunnelblick。

https://tunnelblick.net/downloads.html#releases

选择stable稳定版,我这里选择的Tunnelblick3.8.1

 

2. 双击打开

将配置文件xxx.ovpn 按下图拖入配置框

完成后点击“连接”

 

网络上也有一些免费的公共vpn配置文件可以下载,但稳定性和有效性就自己考量了。

OpenVPN 连接设置文件(.ovpn)从 公共 VPN 中继服务器列表页面 下载。

Telegram连接MTProxy时一直connecting问题

 linux  Telegram连接MTProxy时一直connecting问题已关闭评论
12月 272019
 

我们一般使用Telegram的时候,都需要先爬Qiang,这样还是比较麻烦的,而在Telegram最新版本中内置了MTProxy代理,占用小,耗电量也小,只需要我们简单设置下,就可以让Telegram和本地应用一样,即开即用,而不需要额外的爬Qiang了。

什么是Telegram MTProxy

Telegram MTProxy是Telegram官方出的一个轻量级的代理工具,可以直接配置在Telegram客户端中,不需要开启其他代理就可以直连Telegram。官方地址:Telegram MTProxy

Telegram MTProxy安装

MTProxy具体搭建过程见:https://github.com/TelegramMessenger/MTProxy

如果觉得麻烦也可以使用一键安装方式:https://github.com/FunctionClub/MTProxy-Bash

 

MTProxy 一直Connecting问题排查

情况说明:

  • Google Cloud Platform (GCP) 安装了MTProxy并正常启动(<secret>、proxy-secret、proxy-multi.conf为上面安装步骤中产生的对应文件或字符)。
./mtproto-proxy -u nobody -p 8888 -H 8443 -S <secret> --aes-pwd proxy-secret proxy-multi.conf -M 1
  • gcp上打开了8443入口的访问

 

但启动telegram客户端使用mtproxy代理时输入ip、host和secret后,始终在connecting状态,在gcp上可以看到对应端口的连接都有,但就是连接不上。

  1. 网上一种说法是:因为gcp时间与运行telegram客户端机器时间不同步,可在gcp上安装个ntp服务同步时间解决,但不适用与我这边的情况。
  2. 我这里通过下面步骤解决:使用阿里云服务器或者AWS服务器或GCP搭建Telegram MTProxy时,发现这个MTProxy绑定的是内网IP,解决方案也很简单,使用NAT模式就行,指定内网IP和外网IP, 启动命令行里需要加入  –nat-info <intranet ip>:<public ip>, 上面的启动命令变为:

./mtproto-proxy -u nobody -p 8888 -H 8443 -S <secret> –nat-info <intranet ip内网ip>:<public ip外网ip> –aes-pwd proxy-secret proxy-multi.conf -M 1