兮陌 / zh-CN 这里是薛叶|兮陌的个人博客空间,分享工作经验和生活,欢迎大家收藏,关注我的动态。 Thu, 08 Apr 2021 16:16:37 +0800 Thu, 08 Apr 2021 16:16:37 +0800 Linux服务器Mailx使用第三方SMTP服务器发送邮件 /archives/202/ /archives/202/ Thu, 08 Apr 2021 16:16:37 +0800 兮陌 Mailx在CentOS 7下默认安装,直接使用即可。

非SSL协议使用25端口,SSL协议使用465端口,TLS协议使用587端口。我在配置的时候,不使用SSL协议几乎无法成功,原因也没有搞清楚,也没有必要纠结,为了安全还是用SSL比较好。

1、配置SMTP服务器

只需要修改一个配置文件:/etc/mail.rc,在文件最后添加如下内容。

set smtp-use-starttls # 启用SSL加密
set ssl-verify=ignore # SSL验证方式
set nss-config-dir=/root/.certs # SSL加密证书存放的位置

set from=**********@gmail.com # 发件人
set smtp=smtp.qq.com # SMTP服务器地址
set smtp-auth-user=********* # SMTP帐号
set smtp-auth-password=********* # SMTP密码
set smtp-auth=login # 需要登录认证

2、检查sendmail服务

为什么不直接发送邮件进行测试呢?因为我觉得首先得确保所有先决条件都正常再进行发件测试,就我的经验而言,直接发件肯定会爆出很多问题,与其遇到一个挫败一次,不如提前解决好所有隐患。

systemctl status sendmail

可能出现的错误:

My unqualified host name (db-server) unknown; sleeping for retry

这是无法解析主机名的错误,一般问题出现在修改了Hostname之后,没有同时修改/etc/hosts内的主机名。添加正确的主机名即可解决。

127.0.0.1   localhost localhost.localdomain db-server

修改完毕后重新启动sendmail服务,并检查状态,确保没有异常后进行下一步。

systemctl restart sendmail
systemctl status sendmail

3、生成SSL证书

因为我们使用了SSL进行连接,所以自然需要证书来保证连接安全。还记得刚开始配置文件中的set nss-config-dir=/root/.certs吗?那就是证书存放的位置,我们在这个位置生成SSL证书。

mkdir -p /root/.certs
# 从服务器端获取证书保存到本地
echo -n | openssl s_client -connect smtp.gmail.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/gmail.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/gmail.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/gmail.crt
certutil -L -d /root/.certs

4、进行发件测试

最简单的方式,使用管道发送邮件:

echo "邮件正文" |mail -s "邮件标题" test@gmail.com

可能出现邮件正常发送,但是有报错:

Error in certificate: Peer's certificate issuer is not recognized.

解决方法,信任证书:

# 信任证书
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /root/.certs -i /root/.certs/gmail.crt

到此结束。

5、其他发送邮件的方法

从文本文件读取邮件内容发送:

mail -s "邮件标题" test@gmail.com < mail.txt
]]>
0 /archives/202/#comments /feed/archives/202/
不爱你了 /archives/201/ /archives/201/ Tue, 06 Apr 2021 12:51:15 +0800 兮陌 你喜欢的人不一定会留在你身边,只有爱你的人才会一生一世陪伴你。没有人是要故意变心的,一个人,当他爱你的时候,是真的爱你,可是当他不爱你的时候,也是真的不爱你了。他在爱你的时候,没有办法假装不爱你;同样的,当他不再爱你的时候,也真的没有办法再假装爱你。

总以为我们很爱某个人,会一生一世爱下去,等下去。直到沧海变色,海枯石烂。当所有人都告诉我们,不要执迷,他其实并没有你想象的好,但我们,宁可相信自己给自己编织的童话,也不愿相信身边的人所说的话。总以为我们爱上一个人,我们就必须是一辈子不变心,总以为我们还能等到冥冥中的缘分再度重逢。千里姻缘一线牵,当云雾散尽,当两条相交线错开,我们才知道自己不过是当局者迷。总以为我们很爱某个人,爱到会为他做任何事,爱到华丽的背景下直到你一脸落寞的转身。谁先不爱,谁先离开。总觉得,第一个转身的人是最好的,看着最爱的人远去,我们以为就是一辈子,这一辈子,就他了,除他,我们谁都不会再爱。

心已经对感情麻木了,泪已经流尽,还有什么是自己该值得守候的了,有些东西,并不像自己想的那么脆弱。问一句,失去他,你真的会活不下去吗,也许那一秒钟会是,但是十天或者一个月,一年或者更长的时间呢,忽然某一天你突然醒悟过来自己都会说,为什么,曾经自己是那么的放不下。

其实,我们并不是放不下,我们放不下的只是一种心情,是那种不甘心。为什么,在我还爱你的时候你却不先爱了。为什么,当初你那么爱我,现在却变得这么冷漠。在心里问这些话的时候,其实我们不再是单纯的爱这个人了,我们只是爱上了自己的不甘心。骨子里,没有一个人甘心比别人差,谁都希望自己的一切都是美的,无人可比的。

爱上一个人,我们其实是爱上一种感觉,只有他才能给的感觉。不爱一个人,就是因为感觉没了。不爱了就是不爱了,再勉强也没有用。如果问你,你会怀念曾经爱过的人什么,一定不会是山盟海誓,有的其实是更多的很细小的细节,哄你,呵护你,疼你……我们会说等一个人,其实,我们等的已经不是这个人,只是一种心情,不甘心忽然在的人说离开就离开了。如果他重新回来,你,还会一如既往是爱他,包容他的一切吗,不要那么轻易的说会,用你的心说,你真的会吗?

没有人是要故意变心的,一个人,当他爱你的时候,是真的爱你,可是当他不爱你的时候,也是真的不爱你了。他在爱你的时候,没有办法假装不爱你,同样的,当他在不爱你的时候,也真的没有办法在假装爱你……

所以,何不选择就此放下,因为,我们希望我们自己幸福。

]]>
0 /archives/201/#comments /feed/archives/201/
E舞成名个人练习曲目 - 萌新瑟瑟发抖 /archives/199/ /archives/199/ Wed, 31 Mar 2021 19:05:00 +0800 兮陌 最近又开始玩起了E舞成名,感觉自己的水平这么多年一直半吊子,体力也不太行了。

最近想着,以后年纪大了就玩不动了,这次打算好好练练,看看自己极限能到哪里。

此文记录一些平时喜欢玩的曲子,真的就好久没玩了,好多歌都没有见过。每次选歌就很纠结。

歌曲星级备注
老人与海7竞速疯狂
雨道8竞速疯狂
中国话8竞速混音
Uh-Oh9竞速疯狂
跨时代11竞速疯狂
彩月9竞速疯狂
Butterfly kiss8竞速疯狂
]]>
0 /archives/199/#comments /feed/archives/199/
CentOS 7更换yum源 /archives/198/ /archives/198/ Wed, 24 Mar 2021 00:18:43 +0800 兮陌 对于常规的,使用网易163的源,对于EPEL,使用清华USTC的源。

Base

备份原来的源文件,然后下载网易的即可。

cd /etc/yum.repos.d
mv CentOS6-Base.repo CentOS6-Base.repo.bak
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

http://mirrors.163.com/.help/CentOS6-Base-163.repo

EPEL

安装完EPEL源后编辑下面两个文件。

1、epel.repo

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://centos.ustc.edu.cn/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://centos.ustc.edu.cn/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://centos.ustc.edu.cn/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

2、epel-testing.repo

[epel-testing]
name=Extra Packages for Enterprise Linux 7 - Testing - $basearch
baseurl=http://centos.ustc.edu.cn/epel/testing/7/$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-testing-debuginfo]
name=Extra Packages for Enterprise Linux 7 - Testing - $basearch - Debug
baseurl=http://centos.ustc.edu.cn/epel/testing/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-testing-source]
name=Extra Packages for Enterprise Linux 7 - Testing - $basearch - Source
baseurl=http://centos.ustc.edu.cn/epel/testing/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
]]>
0 /archives/198/#comments /feed/archives/198/
CentOS 7使用TinyProxy搭建代理服务器 /archives/197/ /archives/197/ Tue, 23 Mar 2021 23:16:47 +0800 兮陌 TinyProxy和Squid都是比较优秀的代理软件,TinyProxy比较小众,虽然没有Squid的功能丰富,但是小巧简单,也能满足普通用户的需求。Squid是一款优秀的代理软件,有很丰富的ACL管理功能,虽然squid很强大,但配置比较繁琐。

推荐直接使用yum安装,这种方式简单直接,并且自动配置好了服务脚本。

1、首先安装EPEL源。

EPEL是yum的一个软件源,里面包含了许多基本源里没有的软件,我们在需要使用EPEL时安装它就可以了。

EPEL,即Extra Packages for Enterprise Linux的简称,是为企业级Linux提供的一组高质量的额外软件包,包括但不限于Red Hat Enterprise Linux (RHEL), CentOS and Scientific Linux (SL), Oracle Enterprise Linux (OEL)。

yum -y install epel-release
yum -y install tinyproxy

2、修改配置文件/etc/tinyproxy/tinyproxy.conf

# 代理端口
Port 8888
# 允许访问的地址段,默认只允许本机进行访问
# 允许所有地址访问
# Allow *
# 允许特定的网段访问
Allow 192.1638.88.0/24

3、启动TinyProxy服务并且配置为开机自启。

systemctl start tinyproxy.service
systemctl enable tinyproxy.service

后记:个人主要用途是解决内部网络中,只有部分服务器可以连接外网,其他服务器无法连接外网的问题。其他服务器可以通过可联网的服务器代理进行连接外网。

]]>
0 /archives/197/#comments /feed/archives/197/
MINIO分布式集群搭建不完全指南 /archives/196/ /archives/196/ Fri, 19 Mar 2021 13:23:00 +0800 兮陌 一、基础环境

本文档采用二进制进行MINIO分布式集群搭建,根据官方建议要求,生产环境至少四块硬盘,这样的话可以做到,挂掉一块硬盘集群依然可以读写,挂掉两块硬盘集群依然可读。

二、四节点搭建方式

1、准备机器资源

每台主机分配两块硬盘,一块作为系统盘,另一块作为MINIO数据盘。分布式MINIO里的节点时间差不能超过3秒,你可以使用NTP来保证时间一致。

主机地址MINIO数据盘挂载路径操作系统
192.168.88.11/data/minio_dataCentOS 7.9
192.168.88.12/data/minio_dataCentOS 7.9
192.168.88.13/data/minio_dataCentOS 7.9
192.168.88.14/data/minio_dataCentOS 7.9

2、创建挂载路径

在所有的节点上创建挂载目录,并把磁盘挂载到目录上。关于磁盘的挂载,自行了解。需要注意的是分布式MINIO使用的磁盘里必须是干净的,里面没有数据。

为了便于扩容使用LVM对分区进行管理,PV为sdb1,VG为minio,LV为/dev/minio/data

mkdir -p /data/minio_data
mount /dev/minio/data /data/mini_data
记得修改/etc/fstab,开机自动挂载。

3、上传MINIO和创建启动脚本

所有节点使用统一的目录存放MINIO可执行文件和启动脚本。

mkdir -p /opt/minio

首先需要去下载MINIO:https://dl.minio.io/server/minio/release/linux-amd64/minio

将MINIO可执行文件上传到/opt/minio,然后在相同的目录创建启动脚本start.sh,脚本文件内容如下:

#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=test@minio
 
/opt/minio/minio server \
http://192.168.88.11/data/minio_data \
http://192.168.88.12/data/minio_data \
http://192.168.88.13/data/minio_data \
http://192.168.88.14/data/minio_data

另一种简洁的写法:

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=test@minio
 
/opt/minio/minio server \
http://192.168.88.{11...14}/data/minio_data
分布式MINIO里所有的节点需要有同样的ACCESS_KEY和SECRET_KEY,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将ACCESS_KEY和SECRET_KEY引入环境变量。

另外别忘了需要赋予miniostart.sh这两个文件可执行权限。

为了方便管理MINIO,编写服务脚本,将MINIO注册为服务。

[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
 
[Service]
WorkingDirectory=/opt/minio/
ExecStart=/opt/minio/start.sh
 
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target

脚本编写完成后,执行下面的命令注册服务。

systemctl daemon-reload

4、启动集群

在所有节点上启动MINIO服务,并且配置为开机自动启动。

systemctl start minio.service
systemctl enable minio.service

5、访问集群

使用浏览器输入地址:http://任意节点IP:9000,用户名密码为前面设置的MINIO_ACCESS_KEYMINIO_SECRET_KEY,创建Bucket并上传文件测试。

常见的错误是Server not initialized, please try again,说明集群没有搭建成功,这个就需要你去根据日志排错了。

三、双节点、双挂载搭建方式

根据官方文档,对机器数量并没有硬性要求,只是对硬盘数量有要求,亦可采用双节点、双挂载的方式搭建,甚至可以单节点、四挂载。

这里说一下思路,如果使用两台机器搭建,那么每台机器挂载两块磁盘,启动两个MINIO进程,使用两个不同的端口即可。同理,一台机器上挂载四块磁盘,启动四个MINIO进程也是可以的。

下面的启动脚本示例,使用两台机器进行部署,两个脚本需要一起执行。

start1.sh

#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=test@minio

/opt/minio/minio server --address ":9001" \
http://192.168.88.11:9001/data/minio_data1 \
http://192.168.88.11:9002/data/minio_data2 \
http://192.168.88.12:9001/data/minio_data1 \
http://192.168.88.12:9002/data/minio_data2

start2.sh

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=test@minio

/opt/minio/minio server --address ":9002" \
http://192.168.88.11:9001/data/minio_data1 \
http://192.168.88.11:9002/data/minio_data2 \
http://192.168.88.12:9001/data/minio_data1 \
http://192.168.88.12:9002/data/minio_data2

更多内容请阅读官方文档了解:https://docs.min.io/cn/minio-quickstart-guide.html

]]>
0 /archives/196/#comments /feed/archives/196/
Maven打包后运行文件签名不合法 /archives/195/ /archives/195/ Thu, 04 Mar 2021 20:46:06 +0800 兮陌 运行jar包时报错:
java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

这是因为在使用Maven打包的时候,导致某些包的重复引用,以至于打包之后META-INF目录下多处了一些*.SF,*.DSA,*.RSA文件,我们可以通过配置打包插件来排除这些文件。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <filters>
                    <filter>
                    <artifact>*:*</artifact>
                    <excludes>
                        <exclude>META-INF/*.SF</exclude>
                        <exclude>META-INF/*.DSA</exclude>
                        <exclude>META-INF/*.RSA</exclude>
                    </excludes>
                    </filter>
                </filters>
            </configuration>
        </plugin>
    </plugins>
</build>
]]>
0 /archives/195/#comments /feed/archives/195/
更改Intellij IDEA注释模板的用户名 /archives/194/ /archives/194/ Thu, 04 Mar 2021 20:31:00 +0800 兮陌 在Intellij IDEA中的注释模板中,${user}名称是根据当前操作系统的登录用户名。

修改方法如下:

方法一:可以在settings的file and code template中直接写死。

方法二:在IDE启动的时候,重写user的变量名称。找到IDE的安装目录/bin下面的idea.exe.vmoptionsidea64.exe.vmoptions这两个文件,在里面添加-Duser.name=simaek(在些修改为自己想要的名称)然后重启IDEA。

]]>
0 /archives/194/#comments /feed/archives/194/
在外网使用WOL唤醒家里的计算机设备 /archives/193/ /archives/193/ Tue, 02 Mar 2021 13:46:00 +0800 兮陌 WOL(Wake On Lan)是一种通过网络唤醒电脑的方式,一般在局域网内,通过使用广播地址发送魔术包的方式,使得关机或者休状态的计算机转变成引导或者运行状态。但是过在复杂的环境里,比如在外网唤醒内网的计算机,由于路由器都不转发目的地址为有限广播地址的数据包,需要使用子网定向广播地址,使用路由器的DDNS和端口转发来实现。

WOL需要几个必须的条件:

  • 需要知道目标计算机MAC地址
  • 需要硬件进行支持

局域网内的唤醒对于个人用户似乎意义不大,我们更关心的是在外网远程唤醒家里的电脑。我们可以这么做。

确认计算机的网卡支持网络唤醒(WOL)

主流的电脑应该都是支持的,除非是古董机,最好的方式就是进入BIOS,找到和网卡相关的配置选项,确认开启WOL(不同主板可能有细微区别,根据自己的主板型号搜索)。

获取网卡的MAC地址

以Windows为例,在命令提示符中输入ipconfig /all即可查询系统所有网卡的信息,找到你想用作唤醒网口的网卡,记下它的MAC。

开启端口映射

魔术包默认发送至网卡的9端口,在路由器端口映射添加一条映射规则,外部端口随意(例如我设置为9999),内部IP填写你想要唤醒的计算机的IP,端口填写9,协议为UDP协议。

添加ARP绑定

为什么要添加这个绑定?原因和端口映射有关,因为家用的路由器大部分只支持IP地址映射,不支持MAC映射,我们一开始也说过,我们的唤醒魔术包是要通过MAC地址发送给网卡的,只配置了端口映射,在目标计算机没有开机或者休眠的情况下,是无法通过IP地址定位的。添加了ARP绑定之后,就可以理解为:唤醒数据包 -> 外网IP:9999 -> 内网IP:9 -> 主机MAC:9。我们绑定的就是内网IP和主机MAC。这样数据包就可以通过ARP列表找到主机所在了。

配置DDNS

为什么要配置DDNS?因为家用宽带大部分都是动态的公网IP(可能更多的人甚至都没有公网IP),我们不可能记住每次更新的IP,所以需要一个域名解析到这个公网IP,因为IP是会变的,所以DDNS才叫做动态域名解析服务。

通过DDNS(公网IP)发送唤醒数据包

手机可以安装WOL软件,大同小异,不做推荐。在外网唤醒的时候在配置里要使用指定的IP,而不是广播地址,这一点要注意。
这里推荐一个网站,WOL远程唤醒,只需要填写IP地址,映射的端口,以及内网主机的MAC地址即可进行远程唤醒。

后记:之所以折腾这个,是因为我经常使用远程连接访问家里的电脑,以前的做法是24小时开机,其实还是有点浪费电的,不过也没出过什么问题。直到有一天,我一不小心点了关机,然后就傻了。这种时候就很想瞬移到家里给它开个机,现在有了WOL,终于实现了这个梦想。
]]>
0 /archives/193/#comments /feed/archives/193/
在Centos上编译FFmpeg /archives/187/ /archives/187/ Sun, 07 Feb 2021 22:25:00 +0800 兮陌 翻译自FFmpeg官方Wiki,顺便解决官方文档存在的一些问题。部分代码库地址已经更改,或者需要梯子。如有部分翻译不准确的地方还请指出。

在CentOS上编译FFmpeg

本教程基于最小化安装的CentOS7发行版,提供一个本地、非系统安装的FFmpeg,包含几个常用的外置编码库,本文的介绍同样适用于最新的Red Hat Enterprise Linux (RHEL)Fedora

你也可以参考Generic Compilation Guide获取更多关于编译软件的信息。

最新的静态编译同样适用于懒人或者无法编译的人,这些静态编译不支持非自由编码器。

本教程设计为非侵入式安装,会在你的主目录创建下面几个目录:

  • ffmpeg_sources - 放置下载的源码,如果你想的话,教程结束后可以删除这个目录
  • ffmpeg_build - 放置编译输出文件和安装库文件,如果你想的话,教程结束后可以删除这个目录
  • bin - 安装最终产生的可执行文件(ffmpeg,ffprobe,x264,x265等)

获取依赖

注意:#表示命令需要以超级管理员或者root用户执行,本教程只有yum命令有这个要求

获取以下依赖,这些依赖是编译必需的,但是如果你愿意的话,完成编译后可以移除(make除外,它应该是Linux默认安装的,很多东西需要它):

# yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

在你的主目录新建一个目录,用于放置源码:

mkdir ~/ffmpeg_sources

编译和安装

小提示:如果你不需要特定的编码器,你可以跳过相应的步骤,在最后的FFmpeg里删除相应的./configure编译参数,例如,你不需要libvpx,跳过libvpx编译步骤,在FFmpeg编译步骤里移除--enable-libvpx

1、安装NASM

一些库会使用到的一个汇编器,强烈推荐安装,否则会导致编译非常慢。

cd ~/ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2
tar xjvf nasm-2.14.02.tar.bz2
cd nasm-2.14.02
./autogen.sh
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

2、安装Yasm

一些库会使用到的一个汇编器,强烈推荐安装,否则会导致编译非常慢。

cd ~/ffmpeg_sources
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

3、安装libx264

H.264视频编码器,查看H.264 Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-gpl--enable-libx264

cd ~/ffmpeg_sources
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
警告:如果你在运行./configure后,遇到Found no assembler. Minimum version is nasm-2.13或者类似的提示,是因为你的从源安装了一个过时的nasm包,运行yum remove nasm && hash -d nasm,这样x264就会使用你刚刚编译的nasm来代替。要确保将nasm添加到环境变量中。

4、安装libx265

H.265/HEVC视频编码器,查看H.265 Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-gpl--enable-libx265

cd ~/ffmpeg_sources
git clone --depth 1 https://bitbucket.org/multicoreware/x265_git.git
cd ~/ffmpeg_sources/x265_git/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
这里

5、安装libfdk_aac

AAC音频编码器,查看AAC Audio Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-libfdk_aac(如果包含--enable-gpl,还需要添加--enable-nonfree

cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

6、安装libmp3lame

MP3音频编码器。

需要ffmpeg添加编译参数--enable-libmp3lame

cd ~/ffmpeg_sources
curl -O -L https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install

7、安装libopus

Opus音频解码器和编码器。

需要ffmpeg添加编译参数--enable-libopus

cd ~/ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xzvf opus-1.3.1.tar.gz
cd opus-1.3.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

8、安装libvpx

VP8/VP9视频编码器和解码器,查看VP9 Video Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-libvpx

cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install

9、编译FFmpeg

cd ~/ffmpeg_sources
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
make
make install
hash -d ffmpeg

到此编译结束了,ffmpeg已经可以使用了(ffprobelamex264同理),本教程剩余部分介绍如何更新或者移除FFmpeg。

小贴士:如果你打算按照下面的教程更新,请保留ffmpeg_sources目录和目录下所有内容。否则你可以删掉这个目录了。

更新

FFmpeg还在活跃开发中,偶尔的会有新特性的更新和Bug修复。

首先,移除旧文件并且更新依赖。

rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,lame,x264,x265}
# yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

更新x264

cd ~/ffmpeg_sources/x264
make distclean
git pull

然后和安装libx264步骤一样运行./configuremakemake install

更新x265

cd ~/ffmpeg_sources/x265
rm -rf ~/ffmpeg_sources/x265/build/linux/*
hg update
cd ~/ffmpeg_sources/x265/build/linux

然后和安装libx264步骤一样运行cmake, make, and make install

cd ~/ffmpeg_sources/fdk_aac
make distclean
git pull

然后和安装libx265步骤一样运行./configure, make, and make install

更新libvpx

cd ~/ffmpeg_sources/libvpx
make distclean
git pull

然后和安装libvpx步骤一样运行./configure, make, and make install

更新FFmpeg

rm -rf ~/ffmpeg_sources/ffmpeg

然后重新运行编译FFmpeg步骤。

回滚本教程的变动

rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,lame,nasm,vsyasm,x264,yasm,ytasm}
# yum erase autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool mercurial zlib-devel
hash -r

如果你需要帮助

你可以随意在#ffmpeg IRC频道,或者通过ffmpeg-user邮件列表,提出你的问题。

]]>
0 /archives/187/#comments /feed/archives/187/