• 1. Redhat Linux系统管理 -- 服务与软件包管理B2B–运维部–朱贤军
  • 2. Agenda服务管理initSysV Scriptxinetd计划任务crontabat软件包管理rpmyumrpmbuild2
  • 3. 服务管理 (Service)3
  • 4. 服务定义A Linux service is an application (or set of applications) that runs in the background waiting to be used, or carrying out essential tasks. 主机提供的服务,主要分为系统层面(crond/network)的,以及对外提供的网络服务(http/smtp)。4
  • 5. 常见服务network crond/atd ssh http ntp dns dhcp ftp smtp 5
  • 6. 服务类型根据使用的方法来分,可以分为三类 由init控制的服务 由SysV 脚本控制的服务 由xinetd 管理的服务 6
  • 7. init引导流程7图一: init 引导流程图二: init 命令
  • 8. 由init控制的服务配置文件:/etc/inittab inittab文件被改变后,可以用init q来使改动生效 respawn参数设置服务被关闭时自动重启 tty,runlevel 5时的X window登录界面,都是init控制的服务8
  • 9. inittabinittab决定系统运行级别,及哪些进程在系统引导过程中被启动 inittab格式: - id:runlevels:action:command - id是任意一个名称(具体是什么并不重要),runlevels是一个数字串(代表运行级别),action描述何时执行命令,command指定执行的实际命令。 9
  • 10. Run Levelrunleveldescription0Halt1Single-user mode2Multiuser, without NFS3Full multi-user mode4Not used (user-definable)5Full multi-user mode (with an X-based login screen)6Reboot10
  • 11. inittab actioninitdefault:指定系统引导时运行级别。 id:3:initdefault: id:5:initdefault: sysinit: 在系统引导过程中被执行,在boot、bootwait等条目前执行,忽略运行级别 respawn:启动命令并监视命令的执行,当进程退出时,再次执行该命令(通常用于虚拟终端设备上的登录提示)。 - 1:2345:respawn:/sbin/getty 38400 tty111
  • 12. inittab action(续)ctrlaltdel:指定init在捕获ctrl+alt+del组合键时执行的命令。 ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now /etc/shutdown.allow man shutdown wait:进入指定运行等级时,启动进程。init会停下来,直到执行完成。这个标记用于设置特定运行级别下服务的启动。 更多信息: man inittab12
  • 13. init命令telinit为init软连接,等同于init,切换运行级别及重载inittab文件 init 0 关机,等同于halt,poweroff init 1 进入单用户模式 init 3 进入level 3多用户模式 init 6 重启,等同于reboot init q 重载inittab文件,使得新配置生效 runlevel 查看当前运行级别13
  • 14. 由SysV脚本控制的服务由/etc/rc.d/init.d/目录下的SysV脚本启动 /etc/rc.d/init.d/script {start | stop | restart} 也可以用service命令来执行脚本。 不同运行级别下的开启可以不同 用chkconfig来管理 也被称为standalone的服务14
  • 15. SysV服务启动/关闭15
  • 16. SysV服务交互启动16
  • 17. init/SysV相关文件17
  • 18. init/SysV脚本说明/etc/rc.d/目录包括 rc, rc.local, rc.sysinit, init.d/, rc0.d/, rc1.d/, rc2.d/, rc3.d/, rc4.d/, rc5.d/, rc6.d/ Snn开头为需开启的服务,按数字、字母排序依次开启各个服务 Knn开头为需关闭的服务,按数字、字母排序依次关闭各个服务 先执行K操作,再执行S操作 S/K为大写,若手工改为小写,服务不会启动/关闭 18
  • 19. 由xinetd管理的服务eXtended InterNET services Daemon 由xinetd管理,也称为super daemon服务 服务管理文件在/etc/xinetd.d/目录下 编辑/etc/xinetd.d/目录下的服务文件,将disable=yes(关闭)变成disable=no(开启),再重启xinetd(service xinetd restart),则打开该服务。 xinetd服务支持像tcp_wrappers和PAM这样的访问控制。19
  • 20. xinetd优缺点xinetdstandalone安全控制支持,集中控制需模块支持资源占用低高响应时间慢快20
  • 21. TCP Wrappers简介rpm -q tcp_wrappers /etc/hosts.allow 、 /etc/hosts.deny : : in.telnetd : 140.116.44.202 : deny in.telnetd : 140.116.32.0/255.255.255.0 : deny 这样一来,对方就无法以 telnet 登录你的主机了. 21
  • 22. 1.6 rc.local启动过程中最后被执行的脚本 该脚本在启动中被运行,不负责关闭,如果是数据库等需保证数据一致性的服务,不建议写在rc.local,应该编写为SysV脚本,通过chkconfig进行管理 一般设置ulimit、sysctl等内核参数22
  • 23. 服务管理命令 chkconfig service ntsysv setup23
  • 24. chkconfigSysV脚本: 决定在切换入某个运行级别下时,服务打开还是关闭 xinetd: 在xinetd服务正在运行的情况下,直接开启或关闭基于xinetd的服务 24
  • 25. chkconfig(续)chkconfig --list httpd chkconfig --list | grep “3:on” chkconfig httpd on chkconfig --level 345 httpd on chkconfig --level 345 httpd off chkconfig --add httpd chkconfig --del httpd 25
  • 26. 自定义SysV脚本脚本声明 # chkconfig: - 98 99 # description: sayhello chkconfig: [运行级别] [Snn] [Knn] “运行级别”指定脚本在哪几个运行级别开启,,比如为2345;当为”-”时chkconfig –add sayhello默认不开启服务,需要再运行chkconfig sayhello on才开启 [Snn] [Knn],nn大于等于0且小于100 由于rc.local为99 ,建议nn小于9926
  • 27. 自定义SysV脚本(续)脚本放置在/etc/rc.d/init.d/目录,需支持{start | stop }等功能 注意: 脚本启动时还需要创建 touch /var/lock/subsys/sayhello 如果没有该文件的话,系统关闭时不会执行服务的正常关闭操作,这是由于/etc/rc脚本执行Knn时会同时检查/var/lock/subsys/目录下是否有以服务命名的文件存在,具体查看/etc/rc脚本 27
  • 28. 练习编写一个常用应用(httpd/jboss/mysql等)的SysV脚本,实现开机时自动启动服务,关机时自动关闭服务28
  • 29. SysVinit的未来?systemd upstart ???29
  • 30. 计划任务 (Schedule Tasks)30
  • 31. Linux计划任务Linux系统支持一些能够自动执行任务的服务,我们称其为计划任务: cron:根据一个时间表自动执行任务 anacron:在一个指定时间间隔错过后自动执行任务 at:指定一个时间执行一个任务 batch:当load低于0.8时执行一个任务31
  • 32. cron (schedule recurring tasks)允许系统根据时间表自动完成任务 cron最小任务时间间隔为一分钟 需要运行crond系统服务(daemon) 系统管理员可以用service crond start|stop来开关crond服务 用chkconfig或ntsysv选择crond服务的默认开启关闭。32
  • 33. cron相关rpmvixie-cron-4.1-76.el5 crontabs-1.10-8 anacron-2.3-45.el533
  • 34. cron相关文件/etc/rc.d/init.d/crond /etc/crontab、/etc/cron.d、 cron.hourly 、 cron.daily 、 cron.weekly 、 cron.monthly /var/spool/cron/[username] /etc/cron.allow、 /etc/cron.deny /var/log/cron man crontab34
  • 35. cron环境变量默认环境变量: cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ 注意: crontab的PATH与系统PATH并不一致, 当遇到问题请及时查看/var/log/cron日志文件进行排查35
  • 36. cron工作流首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的文件将载入内存。例如用户名为admin的用户,它所对应的crontab文件就是/var/spool/cron/admin。 cron命令还将搜索 /etc/crontab文件. 36
  • 37. cron工作流(续)cron守护进程每分钟“醒”过来一次,查看当前是否有需要运行的命令,占用资源非常低。 命令执行结束后,任何输出都将作为邮件发送给 crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。 37
  • 38. 系统级crontab采用/etc/crontab作为其crond的运行配置文件 格式:minute hour day-of-month month-of-year day-of-week username commands 默认情况,系统会自动执行以下目录内的脚本, 参考run-parts命令 /etc/cron.hourly:每小时的零一分 /etc/cron.daily:每天四点零二分 /etc/cron.weekly:每周日四点二十二分 /etc/cron.monthly:每月一日四点四十二分 /etc/cron.d/目录下存放着附加的系统守护文件,文件内容同crontab单行格式 不管以哪个username运行,系统级crontab属主都为root38
  • 39. 用户级crontab格式:minute hour day-of-month month-of-year day-of-week commands /var/spool/cron/:存放用户crontab的目录,以username作为文件名 管理命令 crontab -e:编辑当前的守护进程表 crontab -l:列出当前的守护进程表 crontab -r:删除当前的守护进程表 crontab -u user:以某一个用户的身份39
  • 40. 系统级 VS. 用户级crontab系统级用户级语法需指定运行用户不可以指定运行用户属主root当前用户命令不显示显示当前或指定用户任务40为方便查看及管理,如无特殊情况,优先使用用户级crontab 实际使用中基本都为用户级,下面以用户级crontab进行讲解
  • 41. crontab格式minute hour day-of-month month-of-year day-of-week commands 第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用 *代替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。 41
  • 42. crontab格式(续)时间格式如下: 域 允许值范围 ----- -------------- 分钟 0-59 小时 0-23 日 1-31 月 1-12 (或者用jan/feb等名字) 星期几 0-7 (0或7是周日,也可以用mon,tue等表示)42
  • 43. 特殊时间格式@reboot Run once, at startup @yearly Run once a year "0 0 1 1 *" @annually (same as @yearly) @monthly Run once a month "0 0 1 * *" @weekly Run once a week "0 0 * * 0" @daily Run once a day "0 0 * * *" @midnight (same as @daily) @hourly Run once an hour "0 * * * *43
  • 44. crontab特殊符号“*”、“,”、“-”、 “/”、“#”、“%” “每”、”和”、”至”、”隔”、”注释”、”换行” 范例: 20,40 0-23/2 * * * echo “在 20&40 minutes at midnight, 2am, 4am ..., everyday运行命令" 44
  • 45. crontab tips&tricks系统PATH变量默认包括/usr/local/{sbin,bin},而crontab PATH默认不包括,如果找不到命令,可以写绝对路径 % 代表换行,遇到%时需要用\进行转义,否则%之后的内容都会当成command的标准输入对待 */5 * * * * date +%y%m%d > /tmp/cron.date 2 >&1 问:能否执行成功? 45
  • 46. crontab tips&tricks(续)cron产生的任何输出默认会mail给crontab的属主,一般线上 环境没开SMTP服务, 导致/var/spool/mailqueue/下有大量小文件,尤其系统长期运行后,文件系统不允许写了,虽然空间还很多,但inode用完了,可以用df -hi查看inode使用情况,通过ls /var/spool/mailqueue/ | xargs rm –f进行删除 通过以下2种方法避免mail问题: MAILTO=“” >/dev/null 2 >&1 建议使用46
  • 47. crontab权限控制默认情况下,所有用户都可以定制自己的守护任务 系统级任务只能由root来编辑 限制/允许 用户使用cron /etc/cron.allow /etc/cron.deny root不受访问控制列表影响 47
  • 48. crontab权限控制(续)每行一个用户名,不能有空格 如果系统中存在cron.allow,则只有在列在文件中的用户才可以使用crontab指令来定制自己的守护任务,cron.deny文件被忽略 如果系统中存在cron.deny,则列在文件中的用户不可以使用crontab指令来定制自己的守护任务,其他人可以 如果cron.allow、 cron.deny都不存在,则只有root可使用crontab48
  • 49. tmpwatch为指定目录清理陈旧文件 有效应用于防止/tmp目录被填满 tmpwatch每天在/etc/cron.daily中运行 语法: /usr/sbin/tmpwatch 小时数 指定目录 /usr/sbin/tmpwatch -umc 720 /var/tmp # u/m/c任何一个达到720小时即删除 /usr/sbin/tmpwatch -umc -x /tmp/.ICE-unix 240 /tmp # 排除-x /tmp/.ICE-unix目录 49
  • 50. tmpwatch案例分析问题:中文站某群集应用发现/tmp/hsperfdata_*目录会被定期删除,导致jvm某些状态工具无法使用,并且jvm无法设置hsperfdata_username的所在目录 原因: cron定时删除任务导致 /etc/cron.daily/tmpwatch50
  • 51. tmpwatch案例分析(续)解决:排除/tmp/hsperfdata_*目录 /usr/sbin/tmpwatch -x /tmp/.X11-unix -x /tmp/.XIM-unix -x /tmp/.font-unix \         -x /tmp/.ICE-unix -x /tmp/.Test-unix -x /tmp/hsperfdata_* 240 /tmp 除非特殊情况,不建议将data/log等设置到/tmp目录。一、系统默认会定时清理/tmp/目录,可能会导致应用异常;二、/tmp分区一般空间较小;三、维护成本较高 51
  • 52. anacroncron服务的扩展 防止非24小时开机的计算机遗漏守护任务 每次计算机通电时自动检测 配置文件:/etc/anacrontab 格式:period delay job-identifier command period: Days, delay: Minutes 范例: 80 cron.weekly run-parts /etc/cron.weekly 52
  • 53. anacron(续)当你的 Linux 主机并不是全天候开机的时候,anacron 就可以帮你执行在crontab设定时间内没有执行的工作! 举个例子来说,当你的主机在晚上 12:00 会自动关闭,但是偏偏 crontab 这个例行性工作是在 4:00 工作, 这个时候例行性工作不是都没有做到吗? anacron 就可以使用啦! man anacrontab /var/spool/anacron/53
  • 54. at (one-time task)at服务:安排一个任务在未来执行 at服务需要系统后台有一个atd进程 常用指令 at:安排延时任务 atq:查询当前的等待任务 atrm:删除等待任务 batch:以一个低优先级延时执行任务54
  • 55. at相关文件/etc/sysconfig/atd /var/spool/at/ /var/spool/at/spool /etc/rc.d/init.d/atd55
  • 56. at用法at命令的写法非常灵活: at 18:00pm July 9 at 6 pm Monday at noon + 5 minutes 回车后可以在之后的at>提示符下输入任务指令,完成后Ctrl+D存盘退出。 范例: # at now + 2 minutes at>date > /tmp/at.date at>56
  • 57. at权限控制控制文件 /etc/at.allow /etc/at.deny 默认情况下,任何用户都可以使用at服务 root不受访问控制列表限制 57
  • 58. at权限控制(续)如果存在at.allow,则只有在列在文件中的用户才可以使用at服务,同时忽略at.deny 如果存在at.deny,则列在文件中的用户不可以使用at服务,其他人可以 如果at.allow、 at.deny都不存在,则只有root可使用at 58
  • 59. batchAs soon as the load average is below 0.8, the set of commands or script is executed.59
  • 60. 软件包管理 (Redhat Package Manager)60
  • 61. 课程目标能够使用rpm 和 yum 指令安装软件包 了解yum软件仓库的原理和结构 能够编写简单的 spec 文件来制作rpm包 了解 B2B 线上环境的通用规范61
  • 62. 源代码编译?configure make make install62
  • 63. Linux 包管理系统RedHat(RHEL,Fedora,CentOS): RPM (RedHat Package Manager) Ubuntu/Debain: deb 基于源代码的包管理: Gentoo/FreeBSD emerge LFS 多种选择, user based paco63
  • 64. 64RPM 基本使用安装 rpm –ivh $package-$version.rpm rpm –Uvh $package-$version.rpm rpm –Uvh $package-$version.rpm --nodeps rpm –Uvh $package-$version.rpm –force rpm –ivh http://$HOST/$RPMDIR/$package-$version.rpm 卸载 rpm –e Python-libs 注意 Kernel安装问题? -U升级会直接替换掉现有内核,-i会保留现有内核情况下再增加新内核
  • 65. RPM 基本使用查询 rpm –q openssl rpm –qa | grep openssl rpm –qa “openssl*” rpm –ql openssl rpm –qf /usr/lib64/openssl rpm –qi openssl rpm -q --scripts openssl 高级用法: queryformat rpm -q --queryformat "%{version}\n“ rpm -q glibc --queryformat "%{installtime:date}\n" 65
  • 66. 66RPM 基本使用查询软件包 rpm –qpl $package-$version.rpm rpm –qpi $package-$version.rpm rpm –qp --scripts $package-$version.rpm 重建RPM数据库 rpm --rebuilddb
  • 67. RPM 基本使用RPM 的局限性 解决办法:yum 软件仓库67
  • 68. YUM(YellowDog Updater, Modified)安装 yum install saunit yum reinstall saunit yum localinstall saunit yum update saunit yum --exclude=kernel* update 卸载 yum remove saunit 查询 yum list/yum grouplist yum search yum info 缓存清理 yum clean 68
  • 69. 69YUM 源配置/etc/yum.conf /etc/yum.repos.d/*.repo
  • 70. YUM 源配置范例 [main] cachedir=/var/cache/yum logfile=/var/log/yum.log pkgpolicy=newest gpgcheck=0 [base] name=rhel5 - Base baseurl=http://yum.alidc.net/rpm/rh53-x86-64/70
  • 71. 71YUM for x86_64#ls /mnt/yum/rpm/update/rhel5-x86-64/libvirt-0.4.2-1.* -1 /mnt/yum/rpm/update/rhel5-x86-64/libvirt-0.4.2-1.i386.rpm /mnt/yum/rpm/update/rhel5-x86-64/libvirt-0.4.2-1.x86_64.rpm 对某些软件,仓库中需要同时存放 i386 和 x86_64 的包 #rpm -qa | sort | grep zlib
  • 72. YUM仓库搭建createrepo createrepo ls repodata comps-rhel5-server-core.xml filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml TRANS.TBL 通过HTTP/FTP共享72
  • 73. YUM仓库-GROUP管理STEP 1 手工编写Groups File的XML文件 yum-groups-manager -n "alibaba-cn-suite" --id=alibaba-cn-suite --save=alibaba-groups.xml --mandatory alibaba-cronolog alibaba-httpd alibaba-openssl alibaba-jboss405 alibaba-jdk yum-groups-manager -n "alibaba-cn-jboss-suite" --id=alibaba-cn-jboss-suite --merge=alibaba-groups.xml --mandatory alibaba-jboss405 alibaba-jdk 同一XML文件配置多个Groups STEP 2 createrepo -g alibaba-groups.xml STEP 3 yum grouplist/groupinstall 73
  • 74. 74RPM 打包基本原理 rpmbuild 默认目录结构 /usr/src/redhat/ /var/tmp/ 版本惯例 x.y.z-$release
  • 75. RPM打包-自定义目录echo "%_topdir $HOME/rpmbuild" > ~/.rpmmacros echo "%_tmppath $HOME/rpmbuild/tmp" > ~/.rpmmacros mkdir -p $HOME/rpmbuild/{SOURCES,SPECS,BUILD,SRPMS,RPMS,tmp} mkdir $HOME/rpmbuild/RPMS/{i386,i486,i586,i686,noarch,x86_64}75
  • 76. 76rpmbuildsrc.rpm rpmbuild --rebuild $package-$version.src.rpm 一般 rpmbuild -ba $pkgname.spec 可移植软件包 rpmbuild -ba --target=noarch $pkgname.spec
  • 77. SPEC基础:宏定义macros配置文件 /usr/lib/rpm/macros $HOME/.rpmmacros rpm --showrc rpm --eval "%{_topdir}" 77
  • 78. 常用宏定义%_prefix /usr %_var /var %_tmppath %{_var}/tmp %_usr /usr %_usrsrc %{_usr}/src %_topdir %{_usrsrc}/redhat %_specdir %{_topdir}/SPECS %_sourcedir %{_topdir}/SOURCES %_builddir %{_topdir}/BUILD %_rpmdir %{_topdir}/RPMS %{_topdir}/SRPMS %optflags GCC编译优化参数78
  • 79. SPEC文件详解第一部分:宏定义 %define pkg httpd %define name alibaba-httpd %define version 2.2.15 %define release 16 %define __os_install_post /usr/lib/rpm/redhat/brp-compress %define debug_package %{nil}79
  • 80. SPEC文件详解第二部分:软件包信息 Summary: The Apache toolkit for Alibaba B2B Name: %{name} Version: %{version} Release: %{release} License: Alibaba Group: System Environment/Daemons Packager: xianjun.zhuxj BuildRoot: %{_tmppath}/%{name}-%{version}80
  • 81. SPEC文件详解第二部分:软件包信息(续) Source: http://172.22.5.90/sources/%{pkg}-%{version}.tar.gz Patch: Prefix: %{_prefix} Requires: alibaba-openssl BuildRequires: alibaba-openssl %description %changelog 81
  • 82. SPEC文件详解第三部分:打包控制过程 %prep 准备阶段 %setup 解压.tar.gz包 %patch 打补丁 %build 编译阶段configure/make ./configure --prefix=%{_prefix}/alibaba/%{pkg} --with-libevent=/usr/alibaba/libevent --enable-64bit 或 %configure 内置标准宏命令 make -j `cat /proc/cpuinfo | grep processor | wc -l` %install 安装阶段make install make DESTDIR=$RPM_BUILD_ROOT install 或 %makeinstall 内置标准宏命令 82
  • 83. SPEC文件详解第三部分:打包控制过程(续) %file 打包阶段,列举需打进RPM的文件 %defattr(, , , ) %doc %config %exclude %clean 清除临时文件 [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT“ rm -rf $RPM_BUILD_DIR/%{name}-%{version} 83
  • 84. SPEC文件详解第四部分:脚本控制过程 %pre 安装RPM前执行的动作 %post 安装RPM后执行的动作 %preun 卸载RPM前执行的动作 %postun 卸载RPM后执行的动作 84
  • 85. Subpackages按功能编译出多个rpm包,比如alibaba-httpd-doc: %package doc %description doc %files doc %pre doc %post doc %preun doc %postun doc -n — 完全使用 作为独立包名85
  • 86. Fake包组何为Fake包? Fake包只定义相关依赖包(Requires),本身不产生任何内容 方便安装,比如alibaba-cn-suite: Requires: alibaba-openssl Requires: alibaba-httpd = 2.0.63 Requires: alibaba-jdk = 1.6.0_23 Requires: alibaba-jboss405 = 4.0.5.GA Requires: alibaba-cronolog 弊端? 如想升级其中某包,需要删除该fake包,否则无法update;采用yum group管理方式86
  • 87. spec 实例解析一个简单例子 http://ops.alibaba-inc.com/sa-doc/ali_package_manage/admin-manual.html alibaba-httpd-2.2.15 实例 rpm -qp --scripts alibaba-ffmpeg-0.5.3-1.x86_64.rpm87
  • 88. 日常操作安装单个包 yum install alibaba-httpd 安装包组 yum install alibaba-cn-suite sudo yum install alibaba-cn-suite 卸载 rpm -qa | grep alibaba- | xargs rpm –e 注意:操作时先检查一下以免把不该删除的包删除了 rpm -q --requires alibaba-cn-suite | grep '^alibaba' | awk '{print $1}' | xargs rpm -e 88
  • 89. 陷阱:strip 问题编译两次避免 strip 清空 strip 使用的脚本 /usr/lib/rpm/redhat/brp-java-repack-jars 定义 __os_install_post %define __os_install_post /usr/lib/rpm/redhat/brp-compress 这避免了 Java 的 strip,但 C 仍会 strip 89
  • 90. 陷阱:update 时符号链接删除问题原因 update执行顺序导致 解决办法 rpmbuild自带的变量$1,$1==0,指定只有运行 yum remove 时才需要做删除操作 链接在%install中执行,当%file来处理,这样的好处是rpm -ql/-qf直接可以查到信息 90
  • 91. 陷阱:依赖 问题编译openssl-1.0.0d和stunnel时rpm制作成功的,但在安装时提示perl找不到? 解决办法 %define __find_requires %{nil} %define __perl_requires %{nil}91
  • 92. 其他安装后总是有 /usr/debug 目录 %files %exclude /usr/src 软件包在何时被安装?92
  • 93. Alibaba B2B 应用环境标准标准系统版本 RHEL5.3 x86_64 http://ops.alibaba-inc.com/sa-doc/ali_package_manage/user-spec.html 包命名规范 alibaba-$pkgname-$version-$release_number alibaba-jdk-1.6.0_11-4 alibaba-httpd-2.2.15-17 目录规范 符号链接规范 93
  • 94. Alibaba B2B 包组管理自行打包软件本身不设置包依赖关系,以方便管理 Fake 包组——不使用 yum group 查询依赖关系 #yum install alibaba-cn-suite #rpm -q --requires alibaba-cn-suite 目前的包组 94
  • 95. 非标准环境应用自行在 /home/admin 安装 rsync 同步不要在两个大版本的操作系统之间进行,例如 RHEL4.6 -> RHEL5.3,也不要在不同平台之间进行,例如 i386 -> x86_64,即便是号称可移植的 java 等程序,最好重新安装 (myalibaba 的实例)95
  • 96. 应用打包申请流程(目前)架构评估 提供源码、编译参数和其他依赖库、动态库以及第三方插件,SA 执行打包 应用测试该二进制包并确认 SA 将包放入仓库 将来?96
  • 97. Any Questions?97