如何在 Linux 服务器上安装组件

如何在 Linux 服务器上安装组件,第1张

如果缺少这些软件包中的任何软件包,则需从相应的 Linux 分发介质进行安装。有关安装系统软件包的确切步骤,请参阅 OS 文档。注- 64 位版本的 Oracle Enterprise Linux 6 还需要 32 位的 glibc.i686 软件包。下载并提取 Hardware Management Pack。在此过程的其余部分中用于提取文件的目录称为 extraction-directory。注- 为了简单起见,以下步骤使用组件名称+.rpm 表示法来表示文件名。 如果不想安装特定组件的所有 .rpm 文件,请使用以下文件名约定。软件包的文件名的格式如下: component-version. distribution.architecture.rmp其中: component 为libs、snmp、hwmgmt、ipmitool、ipmiflash 或 tools 之一version 为以下之一:1.8.10–3–3(对于 IPMItool 或 IPMIflash)2.1.0–1.e15(对于 libs、snmp、hwmgmt 或 tools)distribution 为esx3、esx4、el4、el5、sl10 或 s11 之一architecture = i386(32 位)或 x86_64(64 位) 例如,对于 Oracle Enterprise Linux 5(32 位),文件名如下所示:ipmitool-1.8.10.3-3.rhel5.i386.rpm oracle-hmp-tools-2.1.0-1.el5.i386.rpm ipmiflash-1.8.10.4-3.rhel5.i386.rpm oracle-hmp-hwmgmt-2.1.0-1.el5.i386.rpm oracle-hmp-snmp-2.1.0-1.el5.i386.rpm oracle-hmp-libs-2.1.0-1.el5.i386.rpm 如果要仅安装 ipmitool 或ipmiflash,请参见以下步骤。 如果还要安装其他 Hardware Management Pack 组件,请转至步骤 4。要安装 ipmiflash,请运行以下命令:# rpm -i /extraction-directory/SOFTWARE/packages/ipmiflash*.rpm要安装 ipmitool,请运行以下命令:# rpm -i /extraction-directory/SOFTWARE/packages/ipmitool*.rpm例如:# rpm -i extraction-directory/SOFTWARE/packages/ipmi*rpm默认情况下,安装后不会显示任何输出结果。确定要安装哪些 Hardware Management Pack 组件。可以安装以下软件包:oracle-hmp-hwmgmt-Oracle Server Hardware Management Agent oracle-hmp-libs-Oracle Hardware Management Pack 库(必需)oracle-hmp-snmp-Oracle Hardware Management Pack SNMP Plugins(需要 oracle-hmp-hwmgmt)oracle-hmp-tools-Oracle Hardware Management Pack CLI Tools注- oracle-hmp-libs 必须随所有软件包一起安装。 如果正在安装 oracle-hmp-snmp,则还必须安装 oracle-hmp-hwmgmt。

在linux下安装vsftp组件按照如下步骤,即可安装成功

安装vsftpd组件

安装完后,有/etc/vsftpd/vsftpd.conf文件,是vsftp的配置文件。

[root@bogon ~]# yum -y install vsftpd

2.添加一个ftp用户

此用户就是用来登录ftp服务器用的。

[root@bogon ~]# useradd ftpuser

这样一个用户建完,可以用这个登录,记得用普通登录不要用匿名了。登录后默认的路径为 /home/ftpuser.     

3.给ftp用户添加密码

[root@bogon ~]# passwd ftpuser

输入两次密码后修改密码。

4.防火墙开启21端口

因为ftp默认的端口为21,而centos默认是没有开启的,所以要修改iptables文件

[root@bogon ~]# vim /etc/sysconfig/iptables

在行上面有22 -jACCEPT 下面另起一行输入跟那行差不多的,只是把22换成21,然后:wq保存。

还要运行下,重启iptables

[root@bogon ~]# service iptables restart

5.修改selinux

selinux:linux下的安全组件,对系统 *** 作做安全控制。修改安全策略

外网是可以访问上去了,可是发现没法返回目录(使用ftp的主动模式,被动模式还是无法访问),也上传不了,因为selinux作怪了。

修改selinux:

执行以下命令查看状态:

[root@bogon ~]# getsebool -a | grepftp

allow_ftpd_anon_write -->off

allow_ftpd_full_access -->off --不能ftptd

allow_ftpd_use_cifs -->off

allow_ftpd_use_nfs -->off

ftp_home_dir -->off--不能访问目录

ftpd_connect_db -->off

ftpd_use_passive_mode -->off

httpd_enable_ftp_server -->off

tftp_anon_write -->off

[root@bogon ~]#

执行上面命令,再返回的结果看到两行都是off,代表,没有开启外网的访问

[root@bogon ~]#setsebool -P allow_ftpd_full_access on

[root@bogon ~]#setsebool -P ftp_home_dir on

6.关闭匿名访问

已经创建ftp用户和密码,使用用户名和密码登陆,所以关闭匿名登陆

修改/etc/vsftpd/vsftpd.conf文件:

重启ftp服务:

[root@bogon ~]# service vsftpd restart

7.用ftp客户端登录即可

COM组件技术在Linux C++下的使用例子COM的接口一. 接口概念的出现承接COM的目的,现在需要将重用的COM对象相互关联在一起,那么有什么好方法呢?(1)OO中使用public成员来让外界和内部对象进行数据交互。COM中更进一步,只能使用public的成员函数。因为直接访问对象内存不利于实行低耦合的模型,所以数据的交互都应该使用函数调用。(2)一个COM对象可以提供多个函数供外部调用,这是很自然的。(3}类似于OO中的多态,一个函数可以被多个COM对象实现,这样调用方可以方便统一的实现所需的功能。在C++中,我们用public成员函数来提供对外接口,用虚函数来实现多态。因此,对COM的要求,实际上就是需要一个虚基类,其定义了一组函数,然后COM类来继承这个基类,从而也拥有了这组函数。而当COM类要有多个供外界调用的函数时,可以把这些函数分别定义在一些虚基类中,然后再用多重继承的方法使COM类拥有这些函数。尽管对每个函数都去定义一个虚基类也毫无不可,但很多时候这样分散并不利于管理这些函数。因此常常把一组功能有关联的函数合并在一个虚基类里面。这个只拥有一组虚函数的基类就是COM中的接口,其目的是定义COM对象被访问的方法。每个接口都被一个GUID标识,称为IID。二. 接口的本质如果把C++描述转化成二进制代码的话,就会发现接口本质上就是vtable,位于COM对象的开头,指向一组函数指针。那么为什么是接口而不是单个函数被GUID表识,从而能够被准确定位呢?还是参考C++编写的COM对象在内存中的二进制表示吧。此时其开头是一列指针,分别对应于多重继承而来的各个接口,然后每个指针指向一个函数指针数组,就是对应于各个接口的成员函数。因此,接口和对象在内存中是平级的!C++实现多重继承时只不过是罗列了多个虚函数表,然后调用函数时再根据具体使用的指针类型,给指向对象的指针加上某个偏移量得到该类型对应的虚函数表,再找到具体的函数。显然指针在接口这一层时可以很自如的通过偏移得到其它的接口指针以及对象指针——而一旦得到具体函数指针后,就很难回头了。COM规定了一个函数QueryInterface(),用来得到接口的指针。并把QueryInterface()放入接口类IUnknown中,而且规定所有的接口都要从IUnknown继承,换句话说,所有的接口都要实现IUnknown类定义的那几个函数。QueryInterface()的引入可以让调用方在使用COM对象时,能够在COM对象提供的接口之间自由的来回切换。当然,正如上面所述,其本质只是指向接口的指针做了偏移而已。三. 接口的使用方法首先,所有COM对象的接口都继承自IUnknown,而IUnknown中是有QueryInterface()函数的。再次,COM对象的开头就是第一个接口的vtable,所以指向COM对象的指针同时也是指向第一个接口的指针。并且,由于接口都是继承自IUnknown,因此这个指针也一定是指向IUnknown的指针。这样一来的话就能够顺利调用QueryInterface(),得到某个接口的指针了。然后,不管任何时候,只要有某接口的指针,就可以接着用QueryInterface()来得到该COM对象拥有的其它接口指针。类厂以及COM对象的构造二. 类厂概念的引入类厂(ClassFactory)这个名词其实有点迷惑性,因为这个东西实际上应该叫对象工厂。类厂也是一个普通的COM对象,它有一个特殊的接口IClassFactory,这个接口的一个函数CreateInstance()能够生成COM对象,并返回其需要的接口。如果把C++中的概念平移过来,就会发现类厂的作用本质上就是那个被C++编译器隐藏了的new。在COM中没有类定义,自然也没有new,要想生成COM对象,只能靠COM类的规范。类厂就实现了从COM类规范到COM对象的过程。当用C++实现COM的时候,往往在类厂也就是new出来一个对象,然后做一个QueryInterface()得到接口指针。表面上看,中间多了类厂这么一层有点多此一举,实际上这里隐含了根据抽象的COM类在内存中生成COM对象的步骤,绝非可有可无的。三. 类厂的返回值在前面说过COM中以COM对象为单位实行重用,COM对象通过接口和外界交互,COM对象的接口之间可以通过偏移来实现跳转。并且,从二进制上看,指向COM对象的指针就是指向COM对象继承的第一个接口的指针。所以,在COM中并不需要一个指向COM对象的指针,而只需要指向该COM对象的某一个接口的指针。因此类厂最后是返回COM对象的一个接口指针来告诉用户,这个COM对象已经生成了。当然,这个接口指针的表识(IID)需要用户提供。COM对象的调用AddRef和Release一. IUnknown接口按照COM标准,所有的COM接口的前三个函数都必须是IUnknown接口的那三个函数:QueryInterface(),AddRef()和Release()。如果用C++表述的话,就是所有的COM接口都必须从IUnknown这个虚基类继承而来。QueryInterface()的作用前面已经说过了,是根据IID查询当前COM对象是否有此接口,并返回接口指针。那么AddRef()和Release()呢?按照字面的意思,AddRef()的意思就是说增加当此接口被引用的次数,而Release()则是释放。实际上也差不多就是这么回事……虽然Release()表面上看起来起一个SubRef()的名字能够更加和AddRef()匹配一点。二. COM对象的创建过程和引用计数的需求如果按照一般的思想,COM对象被创建后,大家自由使用就是了,为了什么非要引入AddRef()和Release()函数?其实这里涉及到的问题主要是COM对象的生存期问题。一个COM对象何时被谁创建?何时又被谁释放呢?最自然的回答肯定是需要时创建以实现应用,不需要时释放以节约系统资源。但是这里实现就有很多问题:首先,按照前面所述,客户并不真正的了解COM对象,它只能提供CLSID来定位COM对象,提供IID来查询接口,然后能做的就是利用接口实现功能。在Windows的COM库中,用CoCreateInstance()函数来封装客户端的调用,然后CoCreateInstance()根据CLSID在注册表中找到实现该对象保存的文件,再根据调用方式的不同(进程内/进程外)将该文件装载入内存,创建类厂,然后用类厂的CreateInstance()接口创建COM对象并返回IID指定的接口。这一连串的工作分的很细,主要的目的就是用中间层,比如COM库函数和标准IClassFactory接口等隔开用户和具体COM对象,实现更好地封装。既然如此,具体生成COM对象的并不是客户端而是COM组件中和COM对象对应的类厂对象。因此,释放或者说从内存中卸载COM对象的任务也不能是客户端完成。而在COM组件中,类厂只管生成,那么释放的任务就只能交给COM对象自己完成了。所以,最后的要求就变成了COM对象自己需要知道什么时候能够释放自身,那么就需要有一个量来表示现在到底又多少用户在使用此COM对象,这就是引用计数了。三. 引用计数的实现实现引用计数的方法很简单,用一个全局的变量来保存计数,多一个引用时加一,少一个引用时减一。COM规定当创建COM对象时先把计数从0加到1,然后加加减减,直到计数变到0,说明已经没有用户使用该COM对象,那么这个就可以释放资源了。由于客户端只能对接口 *** 作,因此AddRef()和Release()需要保证能够在任何接口下都能调用,包括IUnknown。这样一来,这两个函数和QueryInterface()并列成为IUnknown的三个成员也就顺理成章了。这里还有一些小问题。比如说是针对COM对象整体计数呢,还是针对各个接口计数?COM标准没有硬性规定,但是作为COM对象的使用者,客户端必须考虑到不同情况,所以必须是调用增加或减少引用的那个接口的AddRef()和Release()。COM实现的技术,主要是C++的虚函数、多继承以及动态链接库(DLL)技术。COM组件的实现:项目代码如下类厂头文件 链表类厂 头文件 ListClassFactory.h/*************************************************************************>File Name: ListClassFactory.h>Created Time: 2016年09月12日 23时53分23秒 CST************************************************************************/#ifndef _LIST_CLASS_FACTORY_H #define _LIST_CLASS_FACTORY_H#include "../../ibasecom/IUnknown.h" #include "../../ibasecom/IClassFactory.h"class ListClassFactory : public IClassFactory { private:ULONG m_cRefpublic:ListClassFactory(){LogD("ListClassFactory: ","===ListClassFactory()===")}~ListClassFactory(){LogD("ListClassFactory: ","====~ListClassFactory()=======")}private:virtual LONG QueryInterface(const IID&iid, void** ppv)virtual ULONG AddRef()virtual ULONG Release()virtual IUnknown* CreateInstance(const IID&iid,void**ppv)}#ifdef __cplusplus extern "C" { #endifIUnknown* DllGetClassObject(const CLSID &clsid, const IID &iid, void **ppv)IUnknown* (*g_CoCreate)(const IID&iid,void** ppv) = NULL#ifdef __cplusplus } #endif#endifVector类厂 头文件 VectorClassFactory.h/*************************************************************************>File Name: VectorClassFactory.h>Created Time: 2016年08月26日 23时50分23秒 CST************************************************************************/#ifndef _VECTOR_CLASS_FACTORY_H #define _VECTOR_CLASS_FACTORY_H#include "../../ibasecom/IUnknown.h" #include "../../ibasecom/IClassFactory.h"class VectorClassFactory : public IClassFactory { private:ULONG m_cRefpublic:VectorClassFactory(){LogD("VectorClassFactory: ","===VectorClassFactory()===")}~VectorClassFactory(){LogD("VectorClassFactory: ","====~VectorClassFactory()=======")}private:virtual LONG QueryInterface(const IID&iid, void** ppv)virtual ULONG AddRef()virtual ULONG Release()virtual IUnknown* CreateInstance(const IID&iid,void**ppv)}#ifdef __cplusplus extern "C" { #endifIUnknown* DllGetClassObject(const CLSID &clsid, const IID &iid, void **ppv)IUnknown* (*g_CoCreate)(const IID&iid,void** ppv) = NULL#ifdef __cplusplus } #endif#endif类厂实现文件 ListClassFactory.cpp


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7290622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存