Merge "stx-tool: pkgbuilder: Resolve unsafe path transition issue"
This commit is contained in:
commit
393901d8da
@ -22,7 +22,13 @@ ret=`cat /etc/sudoers | grep "${MYUNAME}"`
|
|||||||
if [ "x$ret" == "x" ]; then
|
if [ "x$ret" == "x" ]; then
|
||||||
echo "${MYUNAME} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
echo "${MYUNAME} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
fi
|
fi
|
||||||
chown -R ${MYUNAME}:cgts /localdisk
|
dirs_list=$(find /localdisk -maxdepth 1)
|
||||||
|
for path in $dirs_list; do
|
||||||
|
if [[ $path != "/localdisk" && $path != "/localdisk/pkgbuilder" ]]; then
|
||||||
|
chown -R ${MYUNAME}:cgts $path
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
[ ! -d "/localdisk/pkgbuilder" ] && mkdir /localdisk/pkgbuilder
|
||||||
cp -f /root/buildrc /home/$MYUNAME/
|
cp -f /root/buildrc /home/$MYUNAME/
|
||||||
cp -f /root/localrc /home/$MYUNAME/
|
cp -f /root/localrc /home/$MYUNAME/
|
||||||
cp -f /root/userenv /home/$MYUNAME/
|
cp -f /root/userenv /home/$MYUNAME/
|
||||||
|
@ -6,7 +6,8 @@ $run_lintian = 0;
|
|||||||
$run_piuparts = 0;
|
$run_piuparts = 0;
|
||||||
$purge_build_deps = 'never';
|
$purge_build_deps = 'never';
|
||||||
$purge_build_directory = 'successful';
|
$purge_build_directory = 'successful';
|
||||||
$extra_repositories = [];
|
$extra_repositories = ['deb [trusted=yes] http://stx-stx-repomgr:80/deb-local-binary bullseye main',
|
||||||
|
'deb [trusted=yes] http://stx-stx-repomgr:80/deb-local-build bullseye main'];
|
||||||
$log_colour = 1;
|
$log_colour = 1;
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -17,8 +17,11 @@ import shutil
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
BUILD_ROOT = '/localdisk/loadbuild/'
|
BUILD_ROOT = '/localdisk/loadbuild/'
|
||||||
|
STORE_ROOT = '/localdisk/pkgbuilder'
|
||||||
BUILD_ENGINE = 'sbuild'
|
BUILD_ENGINE = 'sbuild'
|
||||||
DEBDIST = 'bullseye'
|
DEBDIST = 'bullseye'
|
||||||
|
STX_LOCALRC = '/usr/local/bin/stx/stx-localrc'
|
||||||
|
SBUILD_CONF = '/etc/sbuild/sbuild.conf'
|
||||||
|
|
||||||
|
|
||||||
class Debbuilder:
|
class Debbuilder:
|
||||||
@ -47,6 +50,7 @@ class Debbuilder:
|
|||||||
self.chroot_processes = {}
|
self.chroot_processes = {}
|
||||||
self.sbuild_processes = {}
|
self.sbuild_processes = {}
|
||||||
self.ctlog = None
|
self.ctlog = None
|
||||||
|
self.set_extra_repos()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
@ -60,6 +64,34 @@ class Debbuilder:
|
|||||||
def mode(self, mode):
|
def mode(self, mode):
|
||||||
self._mode = mode
|
self._mode = mode
|
||||||
|
|
||||||
|
def set_extra_repos(self):
|
||||||
|
repomgr_url = None
|
||||||
|
if not os.path.exists(STX_LOCALRC):
|
||||||
|
self.logger.warning('stx-localrc does not exist')
|
||||||
|
return
|
||||||
|
|
||||||
|
env_list = []
|
||||||
|
with open(STX_LOCALRC) as f:
|
||||||
|
env_list = list(f)
|
||||||
|
for item in env_list:
|
||||||
|
if item.startswith('export '):
|
||||||
|
envvar = item.replace('export ', '').split('=')
|
||||||
|
if envvar and envvar[0] == 'REPOMGR_DEPLOY_URL':
|
||||||
|
repomgr_url = envvar[1]
|
||||||
|
break
|
||||||
|
|
||||||
|
if repomgr_url:
|
||||||
|
try:
|
||||||
|
with open(SBUILD_CONF, '+r') as f:
|
||||||
|
sconf = f.read()
|
||||||
|
sconf = sconf.replace('http://stx-stx-repomgr:80/',
|
||||||
|
repomgr_url.strip())
|
||||||
|
f.seek(0, 0)
|
||||||
|
f.write(sconf)
|
||||||
|
f.truncate()
|
||||||
|
except IOError as e:
|
||||||
|
self.logger.error(str(e))
|
||||||
|
|
||||||
def has_chroot(self, chroot):
|
def has_chroot(self, chroot):
|
||||||
chroots = os.popen('schroot -l')
|
chroots = os.popen('schroot -l')
|
||||||
for line in chroots:
|
for line in chroots:
|
||||||
@ -83,7 +115,7 @@ class Debbuilder:
|
|||||||
response['msg'] = 'chroot exists'
|
response['msg'] = 'chroot exists'
|
||||||
return response
|
return response
|
||||||
|
|
||||||
user_dir = os.path.join(BUILD_ROOT, user, project)
|
user_dir = os.path.join(STORE_ROOT, user, project)
|
||||||
user_chroots_dir = os.path.join(user_dir, 'chroots')
|
user_chroots_dir = os.path.join(user_dir, 'chroots')
|
||||||
if not os.path.exists(user_chroots_dir):
|
if not os.path.exists(user_chroots_dir):
|
||||||
os.makedirs(user_chroots_dir)
|
os.makedirs(user_chroots_dir)
|
||||||
@ -94,26 +126,32 @@ class Debbuilder:
|
|||||||
self.logger.debug("Invalid chroot %s, clean it" % user_chroot)
|
self.logger.debug("Invalid chroot %s, clean it" % user_chroot)
|
||||||
shutil.rmtree(user_chroot)
|
shutil.rmtree(user_chroot)
|
||||||
|
|
||||||
self.ctlog = open(os.path.join(user_chroots_dir, 'chroot.log'), 'w')
|
try:
|
||||||
chroot_suffix = '--chroot-suffix=-' + user
|
self.ctlog = open(os.path.join(user_dir, 'chroot.log'), 'w')
|
||||||
chroot_cmd = ' '.join(['sbuild-createchroot', chroot_suffix,
|
except IOError as e:
|
||||||
'--include=eatmydata', DEBDIST, user_chroot])
|
self.logger.error(str(e))
|
||||||
if mirror:
|
response['status'] = 'fail'
|
||||||
chroot_cmd = ' '.join([chroot_cmd, mirror])
|
response['msg'] = 'fail to create log file'
|
||||||
self.logger.debug("Command to creat chroot:%s" % chroot_cmd)
|
else:
|
||||||
|
chroot_suffix = '--chroot-suffix=-' + user
|
||||||
|
chroot_cmd = ' '.join(['sbuild-createchroot', chroot_suffix,
|
||||||
|
'--include=eatmydata', DEBDIST, user_chroot])
|
||||||
|
if mirror:
|
||||||
|
chroot_cmd = ' '.join([chroot_cmd, mirror])
|
||||||
|
self.logger.debug("Command to creat chroot:%s" % chroot_cmd)
|
||||||
|
|
||||||
p = subprocess.Popen(chroot_cmd, shell=True, stdout=self.ctlog,
|
p = subprocess.Popen(chroot_cmd, shell=True, stdout=self.ctlog,
|
||||||
stderr=self.ctlog)
|
stderr=self.ctlog)
|
||||||
self.chroot_processes.setdefault(user, []).append(p)
|
self.chroot_processes.setdefault(user, []).append(p)
|
||||||
|
|
||||||
response['status'] = 'creating'
|
response['status'] = 'creating'
|
||||||
response['msg'] = ' '.join(['please check',
|
response['msg'] = ' '.join(['please check',
|
||||||
user_chroots_dir + '/chroot.log'])
|
user_dir + '/chroot.log'])
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def load_chroot(self, user, project):
|
def load_chroot(self, user, project):
|
||||||
response = {}
|
response = {}
|
||||||
user_dir = os.path.join(BUILD_ROOT, user, project)
|
user_dir = os.path.join(STORE_ROOT, user, project)
|
||||||
user_chroots = os.path.join(user_dir, 'chroots/chroot.d')
|
user_chroots = os.path.join(user_dir, 'chroots/chroot.d')
|
||||||
if not os.path.exists(user_chroots):
|
if not os.path.exists(user_chroots):
|
||||||
self.logger.warn("Not find chroots %s" % user_chroots)
|
self.logger.warn("Not find chroots %s" % user_chroots)
|
||||||
@ -133,7 +171,7 @@ class Debbuilder:
|
|||||||
|
|
||||||
def save_chroot(self, user, project):
|
def save_chroot(self, user, project):
|
||||||
response = {}
|
response = {}
|
||||||
user_dir = os.path.join(BUILD_ROOT, user, project)
|
user_dir = os.path.join(STORE_ROOT, user, project)
|
||||||
user_chroots = os.path.join(user_dir, 'chroots/chroot.d')
|
user_chroots = os.path.join(user_dir, 'chroots/chroot.d')
|
||||||
if os.path.exists(user_chroots):
|
if os.path.exists(user_chroots):
|
||||||
shutil.rmtree(user_chroots)
|
shutil.rmtree(user_chroots)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user