parent
4495c6e493
commit
793a914500
@ -0,0 +1,30 @@
|
||||
# Copyright 1999-2011 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: $
|
||||
|
||||
EAPI="3"
|
||||
|
||||
inherit distutils eutils
|
||||
|
||||
SRC_URI="ftp://ftp.calculate.ru/pub/calculate/calculate2/${PN}/${P}.tar.bz2"
|
||||
|
||||
DESCRIPTION="The library for Calculate 2"
|
||||
HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2"
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE=""
|
||||
DEPEND="!<sys-apps/calculate-client-2.1.12
|
||||
!<sys-apps/calculate-server-2.1.11
|
||||
>=dev-lang/python-2.5.2
|
||||
>=dev-python/python-ldap-2.0[ssl]
|
||||
>=dev-python/pyxml-0.8"
|
||||
RDEPEND="${DEPEND}"
|
||||
|
||||
src_unpack() {
|
||||
unpack "${A}"
|
||||
cd "${S}"
|
||||
|
||||
# fix get ip and mac without ifconfig
|
||||
epatch "${FILESDIR}/calculate-lib-2.2.11-fix_getip.patch"
|
||||
}
|
@ -0,0 +1,161 @@
|
||||
diff --git a/pym/cl_fill.py b/pym/cl_fill.py
|
||||
index c5dea91..e86343d 100644
|
||||
--- a/pym/cl_fill.py
|
||||
+++ b/pym/cl_fill.py
|
||||
@@ -129,57 +129,22 @@ class fillVars(object, cl_base.glob_attr):
|
||||
# все ip
|
||||
def get_os_net_ip(self):
|
||||
"""все ip компьютера, разделитель запятая"""
|
||||
- IPs = []
|
||||
- netInterfaces=cl_utils.getdirlist("/sys/class/net/")
|
||||
- for i in netInterfaces:
|
||||
- res = self._runos("/sbin/ifconfig %s"%i)
|
||||
- if not res:
|
||||
- break
|
||||
- for line in res:
|
||||
- searchIP = re.search('addr:([0-9\.]+).+Bcast:', line)
|
||||
- if searchIP:
|
||||
- # ip адрес
|
||||
- ip = searchIP.groups()[0]
|
||||
- IPs.append(ip)
|
||||
- return ",".join(IPs)
|
||||
+ return ",".join(map(cl_utils.getIp,
|
||||
+ cl_utils.getInterfaces()))
|
||||
|
||||
# Разрешенные сети (в данном случае все сети)
|
||||
def get_os_net_allow(self):
|
||||
"""Разрешенные сети разделитель запятая"""
|
||||
-
|
||||
- def getNet(ip, mask):
|
||||
- """По ip и маске получаем сеть"""
|
||||
- octetsMult = (0x1, 0x100, 0x10000, 0x1000000)
|
||||
- octetsIp = map(lambda x: int(x), ip.split("."))
|
||||
- octetsMask = map(lambda x: int(x), mask.split("."))
|
||||
- ipNumb = 0
|
||||
- for i in octetsMult:
|
||||
- ipNumb += octetsIp.pop()*i
|
||||
- maskNumb = 0
|
||||
- for i in octetsMult:
|
||||
- maskNumb += octetsMask.pop()*i
|
||||
- startIpNumber = maskNumb&ipNumb
|
||||
- x = startIpNumber
|
||||
- nMask = lambda y: len(filter(lambda x: y >> x &1 ,range(32)))
|
||||
- return "%s.%s.%s.%s/%s"\
|
||||
- %(x>>24, x>>16&255, x>>8&255, x&255, nMask(maskNumb))
|
||||
-
|
||||
networks=[]
|
||||
- netInterfaces=cl_utils.getdirlist("/sys/class/net/")
|
||||
- flagError = False
|
||||
+ netInterfaces=cl_utils.getInterfaces()
|
||||
for i in netInterfaces:
|
||||
- res = self._runos("/sbin/ifconfig %s"%i)
|
||||
- if not res:
|
||||
- flagError = True
|
||||
- break
|
||||
- for j in res:
|
||||
- s_ip=re.search('addr:([0-9\.]+).+Bcast:.+Mask:([0-9\.]+)' ,j)
|
||||
- if s_ip:
|
||||
- ip, mask = s_ip.groups()
|
||||
- networks.append(getNet(ip, mask))
|
||||
- if flagError:
|
||||
- return ""
|
||||
- return ",".join(networks)
|
||||
+ ipaddr, mask = cl_utils.getIp(i), \
|
||||
+ cl_utils.cidrToMask(cl_utils.getMask(i))
|
||||
+ if ipaddr and mask:
|
||||
+ networks.append(cl_utils.getIpNet(ipaddr, mask))
|
||||
+ else:
|
||||
+ networks.append("")
|
||||
+ return ",".join(filter(lambda x:x,networks))
|
||||
|
||||
def get_os_locale_locale(self):
|
||||
"""локаль (прим: ru_RU.UTF-8)"""
|
||||
diff --git a/pym/cl_utils.py b/pym/cl_utils.py
|
||||
index 195d4d5..e57533b 100644
|
||||
--- a/pym/cl_utils.py
|
||||
+++ b/pym/cl_utils.py
|
||||
@@ -21,6 +21,9 @@ from re import search, compile, S
|
||||
import os
|
||||
import types
|
||||
import subprocess
|
||||
+import socket
|
||||
+import struct
|
||||
+import fcntl
|
||||
|
||||
def getdirlist(s_path):
|
||||
#Получить список директорий по указаному пути
|
||||
@@ -508,3 +511,74 @@ def _toUNICODE(val):
|
||||
return val
|
||||
else:
|
||||
return str(val).decode('UTF-8')
|
||||
+
|
||||
+SYSFS_NET_PATH = "/sys/class/net"
|
||||
+
|
||||
+# From linux/sockios.h
|
||||
+SIOCGIFADDR = 0x8915
|
||||
+SIOCGIFNETMASK = 0x891B
|
||||
+SIOCGIFHWADDR = 0x8927
|
||||
+
|
||||
+def getInterfaces():
|
||||
+ """
|
||||
+ Get available interfaces (discard which hasn't device)
|
||||
+ """
|
||||
+ try:
|
||||
+ return filter(lambda x:os.path.exists(
|
||||
+ path.join(SYSFS_NET_PATH,x,"device")),
|
||||
+ os.listdir(SYSFS_NET_PATH))
|
||||
+ except:
|
||||
+ return []
|
||||
+
|
||||
+def getIp(iface):
|
||||
+ sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
+ ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00'*14)
|
||||
+ try:
|
||||
+ res = fcntl.ioctl(sockfd, SIOCGIFADDR, ifreq)
|
||||
+ except IOError:
|
||||
+ return ""
|
||||
+ finally:
|
||||
+ sockfd.close()
|
||||
+ ip = struct.unpack('16sH2x4s8x', res)[2]
|
||||
+ return socket.inet_ntoa(ip)
|
||||
+
|
||||
+def getMask(iface):
|
||||
+ """
|
||||
+ Get mask for interface
|
||||
+ """
|
||||
+ sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
+ ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00'*14)
|
||||
+ try:
|
||||
+ res = fcntl.ioctl(sockfd, SIOCGIFNETMASK, ifreq)
|
||||
+ except IOError:
|
||||
+ return 0
|
||||
+ finally:
|
||||
+ sockfd.close()
|
||||
+ netmask = socket.ntohl(struct.unpack('16sH2xI8x', res)[2])
|
||||
+ return 32 - int(math.log(ctypes.c_uint32(~netmask).value + 1, 2))
|
||||
+
|
||||
+def getMac(iface):
|
||||
+ """
|
||||
+ Get mac for interface
|
||||
+ """
|
||||
+ sockfd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
+ ifreq = struct.pack('16sH14s', iface, socket.AF_UNIX, '\x00'*14)
|
||||
+ res = fcntl.ioctl(sockfd, SIOCGIFHWADDR, ifreq)
|
||||
+ address = struct.unpack('16sH14s', res)[2]
|
||||
+ mac = struct.unpack('6B8x', address)
|
||||
+ sockfd.close()
|
||||
+ return ":".join(['%02X' % i for i in mac])
|
||||
+
|
||||
+def intIpToStrIp(addr):
|
||||
+ """Convert ip specified by integer to string"""
|
||||
+ return "{0}.{1}.{2}.{3}".format(
|
||||
+ addr>>24,(addr>>16)&0xff,(addr>>8)&0xff,addr&0xff)
|
||||
+
|
||||
+def maskToCidr(mask):
|
||||
+ """Convert mask specified by str to net"""
|
||||
+ mask = strIpToIntIp(mask)
|
||||
+ return 32-int(math.log(((~mask) & 0xffffffff)+1,2))
|
||||
+
|
||||
+def cidrToMask(cidr):
|
||||
+ """Convert net to mask specified by str"""
|
||||
+ return intIpToStrIp((2**cidr-1)<<(32-cidr))
|
@ -0,0 +1,188 @@
|
||||
# Copyright 1999-2011 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: $
|
||||
|
||||
EAPI="3"
|
||||
|
||||
inherit distutils eutils
|
||||
|
||||
SRC_URI="ftp://ftp.calculate.ru/pub/calculate/calculate2/${PN}/${P}.tar.bz2"
|
||||
|
||||
DESCRIPTION="The program for configuring services Linux"
|
||||
HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2"
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
|
||||
IUSE="calculate_nomail
|
||||
calculate_nodhcp
|
||||
calculate_noftp
|
||||
calculate_nojabber
|
||||
calculate_nonamed
|
||||
calculate_nosamba
|
||||
calculate_noproxy"
|
||||
|
||||
DEPEND="=sys-apps/calculate-lib-2.1.11-r1
|
||||
>=net-nds/openldap-2.3[-minimal]
|
||||
>=sys-auth/pam_ldap-180[ssl]
|
||||
>=sys-auth/nss_ldap-239
|
||||
!calculate_nosamba? (
|
||||
>=net-fs/samba-3.4.6[acl,client,cups,ldap,netapi,pam,server,smbclient]
|
||||
<net-fs/samba-4.0.0
|
||||
)
|
||||
!calculate_nomail? (
|
||||
|| ( <net-mail/dovecot-1.2.0[pop3d,ldap,pam,ssl]
|
||||
>=net-mail/dovecot-1.2.0[ldap,pam,ssl]
|
||||
)
|
||||
>=mail-filter/procmail-3.22
|
||||
dev-python/pymilter
|
||||
>=mail-mta/postfix-2.2[ldap,pam,ssl]
|
||||
)
|
||||
!calculate_noftp? (
|
||||
|| ( <net-ftp/proftpd-1.3.3[-acl,ldap,ncurses,nls,pam,ssl,tcpd]
|
||||
>=net-ftp/proftpd-1.3.3[-acl,ident,ldap,ncurses,nls,pam,ssl,tcpd]
|
||||
)
|
||||
)
|
||||
!calculate_nojabber? (
|
||||
>=net-im/ejabberd-2.1.8[mod_pubsub]
|
||||
>=media-gfx/imagemagick-6.6
|
||||
)
|
||||
!calculate_nonamed? ( >=net-dns/bind-9.6.1_p1[sdb-ldap] )
|
||||
!calculate_noproxy? ( >=net-proxy/squid-3.0.14[ldap,pam,ssl] )
|
||||
!calculate_nodhcp? ( >=net-misc/dhcp-3.1.2_p1 )"
|
||||
|
||||
RDEPEND="${DEPEND}"
|
||||
|
||||
src_unpack() {
|
||||
unpack "${A}"
|
||||
cd "${S}"
|
||||
|
||||
# fix for proftpd
|
||||
epatch "${FILESDIR}/calculate-server-2.1.15-fix_proftpd.patch"
|
||||
# fix getip without ifconfig
|
||||
epatch "${FILESDIR}/calculate-server-2.1.15-fix_getip.patch"
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
if [ -d /var/calculate/server-data/mail/imap ] || \
|
||||
[ -d /var/calculate/server-data/samba/win/profiles ] || \
|
||||
[ -d /var/calculate/server-data/samba/unix/profiles ] || \
|
||||
[ -d /var/calculate/server-data/samba/win/netlogon ];
|
||||
then
|
||||
ewarn "Data found in directories of previous version calculate-server"
|
||||
fi
|
||||
|
||||
if [ -d /var/calculate/server-data/mail/imap ];
|
||||
then
|
||||
if ! [ -d /var/calculate/server-data/mail~ ];
|
||||
then
|
||||
if mv /var/calculate/server-data/mail/imap \
|
||||
/var/calculate/server-data/mail~ && \
|
||||
rmdir /var/calculate/server-data/mail && \
|
||||
mv /var/calculate/server-data/mail~ \
|
||||
/var/calculate/server-data/mail;
|
||||
then
|
||||
ewarn
|
||||
ewarn "Data from /var/calculate/server-data/mail/imap"
|
||||
ewarn "was moved to /var/calculate/server-data/mail"
|
||||
MAILUPDATE="TRUE"
|
||||
fi
|
||||
fi
|
||||
if ! [ "${MAILUPDATE}" == "TRUE" ];
|
||||
then
|
||||
eerror "Cannot move /var/calculate/server-data/mail/imap"
|
||||
eerror "Please manualy move /var/calculate/server-data/mail/imap"
|
||||
eerror "to /var/calculate/server-data/mail"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /var/calculate/server-data/samba/win/profiles ];
|
||||
then
|
||||
SAMBAUPDATE=""
|
||||
if ! [ -d /var/calculate/server-data/samba/profiles/win ];
|
||||
then
|
||||
if mkdir -p /var/calculate/server-data/samba/profiles && \
|
||||
mv /var/calculate/server-data/samba/win/profiles \
|
||||
/var/calculate/server-data/samba/profiles/win;
|
||||
then
|
||||
ewarn
|
||||
ewarn "Data from /var/calculate/server-data/samba/win/profiles"
|
||||
ewarn "was moved to /var/calculate/server-data/samba/profiles/win"
|
||||
SAMBAUPDATE="TRUE"
|
||||
fi
|
||||
fi
|
||||
if ! [ "${SAMBAUPDATE}" == "TRUE" ];
|
||||
then
|
||||
eerror "Cannot move /var/calculate/server-data/samba/win/profiles"
|
||||
eerror "Please manualy move "
|
||||
eerror "/var/calculate/server-data/samba/win/profiles"
|
||||
eerror "to /var/calculate/server-data/samba/profiles/win"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /var/calculate/server-data/samba/unix/profiles ]; \
|
||||
then
|
||||
SAMBAUPDATE=""
|
||||
if ! [ -d /var/calculate/server-data/samba/profiles/unix ];
|
||||
then
|
||||
if mkdir -p /var/calculate/server-data/samba/profiles && \
|
||||
mv -f /var/calculate/server-data/samba/unix/profiles \
|
||||
/var/calculate/server-data/samba/profiles/unix;
|
||||
then
|
||||
rmdir /var/calculate/server-data/samba/unix
|
||||
ewarn
|
||||
ewarn "Data from /var/calculate/server-data/samba/unix/profiles"
|
||||
ewarn "was moved to /var/calculate/server-data/samba/profiles/unix"
|
||||
SAMBAUPDATE="TRUE"
|
||||
fi
|
||||
fi
|
||||
if ! [ "${SAMBAUPDATE}" == "TRUE" ];
|
||||
then
|
||||
eerror "Cannot move /var/calculate/server-data/samba/unix/profiles"
|
||||
eerror "Please manualy move "
|
||||
eerror "/var/calculate/server-data/samba/unix/profiles"
|
||||
eerror "to /var/calculate/server-data/samba/profiles/unix"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -d /var/calculate/server-data/samba/win/netlogon ];
|
||||
then
|
||||
SAMBAUPDATE=""
|
||||
if ! [ -d /var/calculate/server-data/samba/netlogon ];
|
||||
then
|
||||
if mv -f /var/calculate/server-data/samba/win/netlogon \
|
||||
/var/calculate/server-data/samba/netlogon;
|
||||
then
|
||||
rmdir /var/calculate/server-data/samba/win
|
||||
ewarn
|
||||
ewarn "Data form /var/calculate/server-data/samba/win/netlogon"
|
||||
ewarn "was moved to /var/calculate/server-data/samba/netlogon"
|
||||
SAMBAUPDATE="TRUE"
|
||||
fi
|
||||
fi
|
||||
if ! [ "${SAMBAUPDATE}" == "TRUE" ];
|
||||
then
|
||||
eerror "Cannot move /var/calculate/server-data/samba/win/netlogon"
|
||||
eerror "Please manualy move "
|
||||
eerror "/var/calculate/server-data/samba/win/netlogon"
|
||||
eerror "/var/calculate/server-data/samba/netlogon"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${MAILUPDATE}" == "TRUE" ];
|
||||
then
|
||||
ewarn
|
||||
ewarn "Please update mail service by the command:"
|
||||
ewarn "\tcl-update mail"
|
||||
fi
|
||||
if [ "${SAMBAUPDATE}" == "TRUE" ];
|
||||
then
|
||||
ewarn
|
||||
ewarn "Please update samba service by the command:"
|
||||
ewarn "\tcl-update samba"
|
||||
fi
|
||||
|
||||
ewarn
|
||||
ewarn "WARNING!!! If you have the samba service, then update it by the command:"
|
||||
ewarn "\tcl-update samba"
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
commit 29425ac4e201ff5702d8d7adea55028ce3d2749b
|
||||
Author: Хирецкий Михаил <mh@calculate.ru>
|
||||
Date: Fri Mar 30 11:09:57 2012 +0400
|
||||
|
||||
Получение MAC и IP адресов без утилиты ifconfig.
|
||||
|
||||
diff --git a/pym/cl_ldap.py b/pym/cl_ldap.py
|
||||
index 385ccdf..e286eda 100644
|
||||
--- a/pym/cl_ldap.py
|
||||
+++ b/pym/cl_ldap.py
|
||||
@@ -21486,30 +21486,11 @@ network %s")%net)
|
||||
|
||||
def getMacInIp(self, ip):
|
||||
"""Находит mac адрес по ip адресу"""
|
||||
- netInterfaces=cl_utils.getdirlist("/sys/class/net/")
|
||||
- flagFound = False
|
||||
- for i in netInterfaces:
|
||||
- execStr = "/sbin/ifconfig %s"%i
|
||||
- res = self.execProg(execStr, None, False)
|
||||
- if not res:
|
||||
- break
|
||||
- mac = ""
|
||||
- for line in res:
|
||||
- sMac = re.search('HWaddr\s+(([0-9a-f]{2}:){5}[0-9a-f]{2})',\
|
||||
- line)
|
||||
- if sMac:
|
||||
- # mac адрес
|
||||
- mac = sMac.groups()[0]
|
||||
- continue
|
||||
- sIP = re.search('addr:([0-9\.]+).+Bcast:', line)
|
||||
- if sIP:
|
||||
- Ip = sIP.groups()[0]
|
||||
- if ip == Ip and mac:
|
||||
- flagFound = True
|
||||
- break
|
||||
- if not flagFound:
|
||||
- mac = ""
|
||||
- return mac
|
||||
+ for iface in cl_utils.getInterfaces():
|
||||
+ mac,iface_ip = cl_utils.getMac(iface),cl_utils.getIp(iface)
|
||||
+ if iface_ip == ip and mac:
|
||||
+ return mac.lower()
|
||||
+ return ""
|
||||
|
||||
def setupDhcpServer(self, options):
|
||||
"""Начальная настройка DHCP сервиса"""
|
@ -0,0 +1,36 @@
|
||||
# Copyright 1999-2012 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: $
|
||||
|
||||
EAPI=3
|
||||
|
||||
DESCRIPTION="Calculate Utilities meta package"
|
||||
HOMEPAGE="http://www.calculate-linux.org/main/en/calculate2"
|
||||
SRC_URI=""
|
||||
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE="
|
||||
cl_assemble
|
||||
cl_builder
|
||||
cl_client
|
||||
cl_desktop
|
||||
cl_installgui
|
||||
cl_server
|
||||
"
|
||||
|
||||
RDEPEND="${RDEPEND}
|
||||
!sys-apps/calculate-templates
|
||||
=sys-apps/calculate-install-2.2.28-r1
|
||||
=sys-apps/calculate-lib-2.2.28-r5
|
||||
=sys-apps/calculate-i18n-2.2.28
|
||||
|
||||
cl_assemble? ( =sys-apps/calculate-assemble-2.2.28-r1 )
|
||||
cl_builder? ( =sys-apps/calculate-builder-2.2.28 )
|
||||
cl_client? ( =sys-apps/calculate-client-2.2.28-r1 )
|
||||
cl_desktop? ( =sys-apps/calculate-desktop-2.2.28 )
|
||||
cl_installgui? ( =app-misc/calculate-install-gui-2.2.28 )
|
||||
|
||||
cl_server? ( =sys-apps/calculate-server-2.1.15-r5 )
|
||||
"
|
Loading…
Reference in new issue