Yum中$releasever和$basearch的取值

查看/etc/yum.repos.d/CentOS-Base.repo

1
2
3
4
5
6
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

其实在日常使用之中,我们在很多地方,特别是脚本内看到了调用$releasever$basearch

  1. $releasever的值,这个表示当前系统的发行版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@ultraera /]# rpm -qi centos-release
Name : centos-release Relocations: (not relocatable)
Version : 6 Vendor: CentOS
Release : 7.el6.centos.12.3 Build Date: Tue 04 Aug 2015 12:13:46 AM CST
Install Date: Sat 21 May 2016 03:31:27 AM CST Build Host: c6b9.bsys.dev.centos.org
Group : System Environment/Base Source RPM: centos-release-6-7.el6.centos.12.3.src.rpm
Size : 35634 License: GPLv2
Signature : RSA/SHA1, Tue 04 Aug 2015 12:15:08 AM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
Summary : CentOS release file
Description :
CentOS release files

# 其中Version 6 就是我们的版本号
  1. $basearch是我们的系统硬件架构(CPU指令集),就是我们常说的i386\i486\i586\i686\
1
2
[root@ultraera /]# arch
i386

但是,当我在命令行查看是却发现$releasever$basearch是空的。


Google 一下之后,说明Yum变量的说明可以在这里(5.3.3. Using Yum Variables)找到,说明如下:

5.3.3. Using Yum Variables

You can use and reference the following built-in variables in yum commands and in all Yum configuration files (that is, /etc/yum.conf and all .repo files in the /etc/yum.repos.d/ directory):

$releasever

You can use this variable to reference the release version of Red Hat Enterprise Linux. Yum obtains the value of $releasever from the distroverpkg=value line in the /etc/yum.conf configuration file. If there is no such line in /etc/yum.conf, then yum infers the correct value by deriving the version number from the redhat-release package.

$arch

You can use this variable to refer to the system’s CPU architecture as returned when calling Python’s os.uname() function. Valid values for $arch include: i586, i686 and x86_64.

$basearch

You can use $basearch to reference the base architecture of the system. For example, i686 and i586 machines both have a base architecture of i386, and AMD64 and Intel64 machines have a base architecture of x86_64.

$YUM0-9

These ten variables are each replaced with the value of any shell environment variables with the same name. If one of these variables is referenced (in /etc/yum.conf for example) and a shell environment variable with the same name does not exist, then the configuration file variable is not replaced.

To define a custom variable or to override the value of an existing one, create a file with the same name as the variable (without the “$” sign) in the /etc/yum/vars/ directory, and add the desired value on its first line.

For example, repository descriptions often include the operating system name. To define a new variable called $osname, create a new file with “Red Hat Enterprise Linux” on the first line and save it as /etc/yum/vars/osname:

echo “Red Hat Enterprise Linux” > /etc/yum/vars/osname

Instead of “Red Hat Enterprise Linux 6”, you can now use the following in the .repo files: name=$osname $releasever

文中说到$releasever的定义可以查看 /etc/yum.conf 文件的事distroverpkg=value 行,打开 /etc/yum.conf 看一下,默认文件(我的是CentOS 6)内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

distroverpkg=centos-release 代表什么? 去哪找 centos-release 。找到这里我再一次表示困惑。
不过另一篇文章进行了我的视野: yum的$releasever真是太反动了, 关键内空如下:

在 /etc/yum.repos.d/ 目录下的软件库定义文件中,常常会在 baseurl 的路径中提到 $releasever 这个变量,表示当前发行版的大版本号,但大家知道这个变量是在哪设置的吗?我 grep 了整个 etc 目录都没找到,还是看了 yum.conf 才知道的,是在 yum.conf 文件里 distroverpkg 选项定义的。但这个选项就很有问题:

distroverpkg 和 releasever 名字不同,且看不出什么联系
distroverpkg 的值,并不是明文,而是“redhat-release”。不知道大家看到这个会有什么想法,反正我是首先想到了 /etc/redhat-release 文件,但我错了。实际上指的是 redhat-release 这个RPM包。所谓“distroverpkg=redhat-release”的意思,其实是将 $releasever 设置为 redhat-release 这个RPM包的版本号.

小结:

yum中的$releasever变量是取redhat-release-server rpm包的属性值( %{version})。
[root@ldap01 ~]# rpm -q –qf %{version} redhat-release-server;echo
6Server

HowTo Use Remi Install Redis

Setup 1. Install

Frist, To install remi Repo and epel Repo.

Remi EL6 for CentOS/RHEL 6.x

1
2
rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Remi EL5 for CentOS/RHEL 5.x

1
2
rpm -Uvh https://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

有时间我们会碰到remi.repo无法使用报错,就像这样:

1
http://remi.schlundtech.de/enterprise/latest/remi/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"

这时我们需要修改/etc/yum.repos.d/remi.repo,像这样:

1
2
baseurl=http://rpms.famillecollet.com/enterprise/5/remi/$basearch/
#mirrorlist=http://rpms.famillecollet.com/enterprise/5/remi/mirror/$basearch/

如果发现安装后yum makecache没看到相应的源站点,请检查repo文件的enable参数是否为1,1为开启,0为关闭状态。

1
2
3
4
5
[repoName]
name=repoName repo
baseurl=http://repoPath
gpgcheck=0 # 是否启用gpgkey检查
enabled=0 # 是否启用该源

Install Redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
yum install -y redis

[root@zabbix yum.repos.d]# rpm -qi redis
Name : redis
Version : 3.2.1
Release : 2.el5.remi
Architecture: x86_64
Install Date: Thu 28 Jul 2016 12:00:41 PM CST
Group : Applications/Databases
Size : 2113279
License : BSD
Signature : DSA/SHA1, Fri 24 Jun 2016 01:30:12 PM CST, Key ID 004e6f4700f97f56
Source RPM : redis-3.2.1-2.el5.remi.src.rpm
Build Date : Fri 24 Jun 2016 01:28:27 PM CST
Build Host : builder.remirepo.net
Relocations : (not relocatable)
Packager : http://blog.remirepo.net/
Vendor : Remi Collet
URL : http://redis.io
Summary : A persistent key-value database

Setup 2. 基本配置项

Redis 配置默认文件/etc/redis.conf

# 设置Redis的运行模式,yes表示后台运行,no表示不开启后台运行。

1
daemonize yes

# 指定 redis 监听端口,默认为 6379

1
port 6379

# 设置bind_ip,默认监听接口,默认是监听本地,如果未配置的情况下,只有本地可以访问redis,如果取消,则默认监听所有接口

1
# bind 127.0.0.1

# 指定日志记录级别

1
2
3
4
5
6
# debug  记录很多信息,用于开发和测试
# varbose 很多精简的有用信息,不像 debug 会记录那么多
# notice 普通的 verbose,常用于生产环境
# warning 只有非常重要或者严重的信息会记录到日志

loglevel verbose

# 配置 log 文件名称和全路径地址,默认为stdout,即标准输出,输出到/dev/null,可以手动指定redis日志文件地址,建议级别不要太高,否则会产生大量日志,注意避免磁盘因此撑满。

1
logfile stdout

# 可用数据库数,默认值为 16,默认数据库存储在 DB 0 号 ID 库中,无特殊需求,建议仅设置一个数据库

# 查询数据库使用 SELECT ‘dbid’,dbid 介于 0 到 ‘databases’-1 之间。

1
database 16

# 安全限定,要求客户端在处理任何命令时都要验证身份和设置密码。

# 默认不启用,若要启用,需要将下行取消注释,并将foobared设置自定一的密码接即可。

因为redis加密是通过配置文件进行,所以目前各大云厂家的redis PAAS 服务,都不支持redis加密,在程序开发时需要注意。

1
2
3
4
# requirepass foobared

# 如果开启了安全验证,这时通过redis-cli登录时需要首先执行auth,否则不能正常使用。
redis-cli> auth foobared

# 向redis内插入一条数据

1
redis-cli>  set [key] [values]

# 获取key的值

1
redis-cli> get key

# 查看redis的db信息

1
redis-cli> info

Setup 3. Others

  • redis-dump
  • master/slave
  • slow log

Wait …

CentOS 6(1) 使用createrepo搭建本地源

Tips: 本地搭建本地yum源采用的rpm全部来自CentOS-6.7-bin-DVD1&DVD2

1. 测试环境

  • MacBook Pro 15-inch i7 16GB
  • VMware Fushion 8 Pro
  • CentOS-6.7-i686-minimal.iso

因为配置本地yum源需要修改/目录下的文件及/etc下面的配置文件,建议更换到root用户。

2. 实验步骤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 2.1 因为配置本地yum源需要修改/目录下的文件及/etc下面的配置文件,建议更换到root用户。
[adam@ultraera ~]$ su -
Password:
[root@ultraera ~]#

# 2.2 首先在本地创建一个存放rpm包的目录,我这里选择直接在/下创建,你可以自定义:
[root@ultraera ~]# mkdir /yumload
[root@ultraera ~]# cd /yumload/
[root@ultraera yumload]# pwd
/yumload
# 2.3 接下来把两张DVD中的Packages中的rpm包全部拷贝到/yumload:
[root@ultraera yumload]# cp /media/CentOS_6.5_Final/Packages/* ./
[root@ultraera yumload]# ll ./*.rpm | wc -l

#两张DVD一共有的rpm包的数量:
4802


# 2.4 然后使用createrepo指令创建本地repo,CentOS6默认不安装createrepo,需要手动安装,没关系,在我们的DVD光盘中已经集成了createrepo的包,如果报需要依赖安装其他包的使用,依次安装即可。

[root@ultraera yumload]# rpm -ivh createrepo-0.9.9-18.el6.noarch.rpm

# 2.5 创建yum仓库,耐心等待,可以加-v参数列出执行信息
[root@ultraera yumload]# createrepo /yumload/
Spawning worker 0 with 4802 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@ultraera yumload]#

# 2.6 在/etc/yum.repo.d/下创建一个repo文件,文件名可以自定义,但一定要以repo结尾,并添加一下内容:
[ultraera.org] #仓库名称可以自定义
name=This is a local repo #描述信息
baseurl=file:///yumload/ #这里填写仓库的url,注意 有三个正斜线
enabled=1 #是否开启仓库,1为开启,0为关闭
gpgcheck=0 #是否检查gpgkey,1为开启,0为关闭

# 2.7 另外如果想要添加软件包group的信息,可以把DVD1中的repodata文件中的*-comps.xml文件,使用ceraterepo -g 加载本地仓库即可,代码如下:
[root@ultraera repodata]# createrepo -g [字符可能不一样,后缀正确就行]c6-i386-comps.xml /yumload/


# 2.8 到这里本地yum源就已经搭建完成了,接下来重新初始化yum缓存:
[root@ultraera repodata]# yum clean all
Loaded plugins: fastestmirror, refresh-packagekit, security
Cleaning repos: ultraera.org
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@ultraera repodata]# yum makecache
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
ultraera.org | 2.9 kB 00:00 ...
ultraera.org/filelists_db | 4.9 MB 00:00 ...
ultraera.org/primary_db | 3.5 MB 00:00 ...
ultraera.org/other_db | 2.1 MB 00:00 ...
Metadata Cache Created

# 2.9 测试group信息是否添加正确可以用如下代码,只要有正确输出信息就表示成功了
[root@ultraera ~]# yum grouplist
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×