====== heartbeat 2 ====== ===== /usr/local/portage/sys-cluster/heartbeat/heartbeat-2.1.4.ebuild ===== # ========================================================================== # This ebuild come from wschlich-testing repository. Zugaina.org only host a copy. # For more info go to http://gentoo.zugaina.org/ # ************************ General Portage Overlay ************************ # ========================================================================== # Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ inherit autotools eutils flag-o-matic DESCRIPTION="Heartbeat High-Availability Cluster Manager" HOMEPAGE="http://www.linux-ha.org" SRC_URI="http://hg.linux-ha.org/lha-2.1/archive/STABLE-2.1.4.tar.bz2" S="${WORKDIR}/Heartbeat-STABLE-2-1-STABLE-2.1.4" LICENSE="GPL-2" SLOT="0" KEYWORDS="~amd64 ~x86" IUSE="crm doc ipmi ldirectord snmp" RDEPEND=" =dev-libs/glib-2* dev-libs/libxml2 net-libs/libnet >=dev-lang/perl-5.8.8 >=dev-lang/python-2.4 >=dev-python/pyxml-0.8 net-misc/iputils virtual/ssh net-libs/gnutls ldirectord? ( sys-cluster/ipvsadm dev-perl/Net-DNS dev-perl/libwww-perl dev-perl/perl-ldap virtual/perl-libnet dev-perl/Crypt-SSLeay dev-perl/HTML-Parser dev-perl/perl-ldap dev-perl/Mail-IMAPClient dev-perl/Mail-POP3Client dev-perl/MailTools ) snmp? ( net-analyzer/net-snmp ) net-misc/telnet-bsd ipmi? ( >=sys-libs/openipmi-2 ) " DEPEND="${RDEPEND} dev-lang/swig dev-util/pkgconfig " # let the user override the user and group defaults # WARNING! ATTENTION! if you plan to use DRBD for cluster storage, # please note that /sbin/drbdmeta and /sbin/drbdsetup need to # be SUID root and executable by ${HA_GROUP_NAME}! # otherwise, Heartbeat will not be able to handle DRBD correctly. test -z "${HA_GROUP_ID}" && HA_GROUP_ID='65' test -z "${HA_GROUP_NAME}" && HA_GROUP_NAME='haclient' test -z "${HA_USER_ID}" && HA_USER_ID='65' test -z "${HA_USER_NAME}" && HA_USER_NAME='hacluster' test -z "${HA_USER_HOME}" && HA_USER_HOME='/var/lib/heartbeat' pkg_setup() { # check for heartbeat/HA group if ! egetent group ${HA_GROUP_NAME} >&/dev/null; then # check for an existing group name with another gid local existing_group_name=$(egetent group ${HA_GROUP_ID} | cut -d : -f 1) if [[ -n "${existing_group_name}" ]] && \ [[ "${existing_group_name}" != "${HA_GROUP_NAME}" ]]; then eerror eerror "an existing group with gid '${HA_GROUP_ID}' and a" eerror "name other than '${HA_GROUP_NAME}' has been found" eerror "on your system. either remove the user or change" eerror "the uid to another one." eerror die "system group name problem" fi # create the new group enewgroup ${HA_GROUP_NAME} ${HA_GROUP_ID} else # check for an existing gid with another group name local existing_group_id=$(egetent group ${HA_GROUP_NAME} | cut -d : -f 3) if [[ -n "${existing_group_id}" ]] && \ [[ "${existing_group_id}" != "${HA_GROUP_ID}" ]]; then eerror eerror "an existing group with the name '${HA_GROUP_NAME}' and a" eerror "gid other than '${HA_GROUP_ID}' has been found" eerror "on your system. either remove the group or change" eerror "the name to another one." eerror die "system group id problem" fi fi # check for heartbeat/HA user if ! egetent passwd ${HA_USER_NAME} >&/dev/null; then # check for an existing user name with another uid local existing_user_name=$(egetent passwd ${HA_USER_ID} | cut -d : -f 1) if [[ -n "${existing_user_name}" ]] && \ [[ "${existing_user_name}" != "${HA_USER_NAME}" ]]; then eerror eerror "an existing user with uid '${HA_USER_ID}' and a" eerror "name other than '${HA_USER_NAME}' has been found" eerror "on your system. either remove the user or change" eerror "the uid to another one." eerror die "system user name problem" fi # create the new user enewuser ${HA_USER_NAME} ${HA_USER_ID} -1 ${HA_USER_HOME} ${HA_GROUP_NAME} else # check for an existing uid with another user name local existing_user_id=$(egetent passwd ${HA_USER_NAME} | cut -d : -f 3) if [[ -n "${existing_user_id}" ]] && \ [[ "${existing_user_id}" != "${HA_USER_ID}" ]]; then eerror eerror "an existing user with the name '${HA_USER_NAME}' and a" eerror "uid other than '${HA_USER_ID}' has been found" eerror "on your system. either remove the user or change" eerror "the name to another one." eerror die "system user id problem" fi fi # check for USE flag constraints if ! use crm && use snmp; then die "USE=snmp requires USE=crm (disable USE=snmp or enable USE=crm)" fi } src_unpack() { unpack ${A} cd "${S}" eautoreconf } src_compile() { econf \ --localstatedir=/var \ --with-group-name=${HA_GROUP_NAME} \ --with-group-id=${HA_GROUP_ID} \ --with-ccmuser-name=${HA_USER_NAME} \ --with-ccmuser-id=${HA_USER_ID} \ --disable-rpath \ --disable-fatal-warnings \ $(use_enable snmp) \ $(use_enable snmp snmp-subagent) \ $(use_enable ipmi ipmilan) \ --enable-checkpointd \ --enable-quorumd \ --enable-dopd \ $(use_enable crm) \ --enable-lrm \ --disable-mgmt \ || die "configure failed" emake -j 1 || die "make failed" } src_install() { # FIXME: convert to emake? make DESTDIR="${D}" install || die "make install failed" # heartbeat modules need these dirs # FIXME: is this (not) needed? #keepdir /var/lib/heartbeat/ckpt /var/lib/heartbeat/ccm /var/lib/heartbeat keepdir \ /etc/ha.d/conf \ /var/lib/heartbeat/{ccm,ckpt,lrm,fencing} \ /var/lib/heartbeat/cores/{${HA_USER_NAME},root,nobody} \ /var/run/heartbeat/ccm if use crm; then keepdir \ /var/lib/heartbeat/crm \ /var/lib/heartbeat/pengine \ /var/run/heartbeat/crm else rm "${D}"/usr/lib/heartbeat/haresources2cib.py fi dosym /usr/sbin/ldirectord /etc/ha.d/resource.d/ldirectord if ! useq ldirectord; then rm \ "${D}"/etc/init.d/ldirectord \ "${D}"/etc/logrotate.d/ldirectord \ "${D}"/etc/ha.d/resource.d/ldirectord \ "${D}"/usr/share/man/man8/supervise-ldirectord-config.8 \ "${D}"/usr/share/man/man8/ldirectord.8 \ "${D}"/usr/sbin/ldirectord \ "${D}"/usr/sbin/supervise-ldirectord-config fi newinitd "${FILESDIR}"/heartbeat.init-r2 heartbeat dodoc \ README \ doc/*.{cf,txt} \ doc/{haresources,authkeys,AUTHORS,COPYING} \ ldirectord/ldirectord.cf } Build Steps * ebuild /usr/local/portage/sys-cluster/heartbeat/heartbeat-2.1.4.ebuild digest * emerge -upDN heartbeat ===== /etc/init.d/heartbeat2 ===== ##!/sbin/runscript # Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header$ opts="${opts} reload" HA_DIR='/etc/ha.d' depend() { use logger need net after sshd } checkconfig() { # check for base directory if ! [ -d "${HA_DIR}" ]; then eerror "HA directory '${HA_DIR}' does not exist" return 1 fi # check for shellfuncs local HA_SHELLFUNCS="${HA_DIR}/shellfuncs" if ! [ -e "${HA_SHELLFUNCS}" ]; then eerror "HA shellfuncs file '${HA_SHELLFUNCS}' does not exist" return 1 elif ! . "${HA_SHELLFUNCS}"; then eerror "Failed to source HA shell functions '${HA_SHELLFUNCS}'" return 1 fi # check for ha.cf local HA_CF="${HA_DIR}/ha.cf" if ! [ -e "${HA_CF}" ]; then eerror "HA config file '${HA_CF}' does not exist" return 1 fi # check for haresources if not using the CRM if ! checkbool "$(ha_parameter crm)"; then local HA_RESOURCES="${HA_DIR}/haresources" if ! [ -e "${HA_RESOURCES}" ]; then eerror "HA resources file '${HA_RESOURCES}' does not exist" return 1 fi fi # check for authkeys local HA_AUTHKEYS="${HA_DIR}/authkeys" if ! [ -e "${HA_AUTHKEYS}" ]; then eerror "HA authkeys file '${HA_AUTHKEYS}' does not exist" return 1 fi } # Check for boolean values checkbool() { case $(echo "${1}" | tr '[:upper:]' '[:lower:]') in y|yes|enable|on|true|1) return 0;; *) return 1;; esac } # Run startstop script if it exists run_startstop() { if [ -x ${HA_DIR}/resource.d/startstop ]; then ${HA_DIR}/resource.d/startstop "${@}" fi } start() { checkconfig || return 1 ebegin "Starting ${SVCNAME}" # start the log subsystem checkbool "$(ha_parameter use_logd)" && { /usr/lib/heartbeat/ha_logd -s &>/dev/null || \ /usr/lib/heartbeat/ha_logd -d -c /etc/ha.d/ha_logd.cf } run_startstop pre-start checkbool "$(ha_parameter crm)" || \ /usr/lib/heartbeat/ResourceManager verifyallidle # run heartbeat /usr/lib/heartbeat/heartbeat &>/dev/null ret=$? run_startstop post-start eend ${ret} } stop() { checkconfig || return 1 ebegin "Stopping heartbeat" run_startstop pre-stop /usr/lib/heartbeat/heartbeat -k &>/dev/null ret=$? run_startstop post-stop ${ret} # stop log subsystem checkbool "$(ha_parameter use_logd)" && { /usr/lib/heartbeat/ha_logd -s &>/dev/null && \ /usr/lib/heartbeat/ha_logd -k &>/dev/null } eend ${ret} } status() { checkconfig || return 1 ebegin "Checking for ${SVCNAME}" /usr/lib/heartbeat/heartbeat -s eend $? } reload() { checkconfig || return 1 ebegin "Reloading ${SVCNAME}" /usr/lib/heartbeat/heartbeat -r &>/dev/null eend $? } restart() { checkconfig || return 1 let sleeptime=$(ha_parameter deadtime)+10 svc_stop ebegin "Waiting ${sleeptime}s to allow resource takeover to complete" sleep ${sleeptime} eend 0 svc_start } ===== /etc/ha.d/ha.cf ===== use_logd on bcast eth1 keepalive 2 warntime 10 deadtime 30 auto_failback off node servername01 servername02 crm no ===== /etc/ha.d/ha_logd.cf ===== debugfile /var/log/ha-debug logfile /var/log/ha-log ===== /etc/ha.d/haresources ===== servername01 192.168.77.1/24/eth1 servername01 172.16.77.1/24/eth0 ===== /etc/ha.d/authkeys ===== auth 1 1 sha1 some-really-clever-password Install service for startup * rc-update add heartbeat2 default ''If cloning remeber to:'' ''Delete /var/lib/heartbeat/hb_uuid on either one of the machines and try again.''