10: 2021-07-12 (月) 10:15:51 iseki |
11: 2021-07-13 (火) 11:33:34 iseki |
| 9 cp /etc/subuid- /etc/subuid | | 9 cp /etc/subuid- /etc/subuid |
| | | |
- | **** [[start.sh>./start.sh]] [#q31443f9] | + | **** [[start.sh(改)>./start.sh]] [#q31443f9] |
| - コンテナ内の /usr/local/bin/start.sh | | - コンテナ内の /usr/local/bin/start.sh |
| -- コンテナ内の環境設定スクリプト | | -- コンテナ内の環境設定スクリプト |
| ....... | | ....... |
| return super(NSLDockerSpawner, self).start() | | return super(NSLDockerSpawner, self).start() |
| + | #br |
| + | |
| + | **** ProjectDockerSpawner [#d9dde499] |
| + | - 参考: https://gist.github.com/marufeuille/596cf6f9e26fa6fcb7e304d5b163c7c8 |
| + | |
| + | 476 # refer: https://gist.github.com/marufeuille/596cf6f9e26fa6fcb7e304d5b163c7c8 |
| + | 477 from dockerspawner import SystemUserSpawner |
| + | 478 from traitlets import Unicode |
| + | 479 import pwd, os, grp |
| + | 480 |
| + | 481 class ProjectDockerSpawner(SystemUserSpawner): |
| + | 482 |
| + | 483 dobleArguments = False |
| + | 484 #dobleArguments = True |
| + | 485 |
| + | 486 |
| + | 487 host_homedir_format_string = Unicode( |
| + | 488 "/home/{groupname}/{username}", |
| + | 489 config = True, |
| + | 490 ) |
| + | 491 |
| + | 492 image_homedir_format_string = Unicode( |
| + | 493 "/home/{groupname}/{username}", |
| + | 494 config = True, |
| + | 495 ) |
| + | 496 |
| + | 497 |
| + | 498 @property |
| + | 499 def host_homedir(self): |
| + | 500 if ( |
| + | 501 self.host_homedir_format_string is not None |
| + | 502 and self.host_homedir_format_string != "" |
| + | 503 ): |
| + | 504 homedir = self.host_homedir_format_string.format(username=self.user.name, groupname=self.get_groupname()) |
| + | 505 else: |
| + | 506 import pwd |
| + | 507 |
| + | 508 homedir = pwd.getpwnam(self.user.name).pw_dir |
| + | 509 return homedir |
| + | 510 |
| + | 511 |
| + | 512 @property |
| + | 513 def homedir(self): |
| + | 514 return self.image_homedir_format_string.format(username=self.user.name, groupname=self.get_groupname()) |
| + | 515 |
| + | 516 |
| + | 517 def get_args(self): |
| + | 518 args = super(ProjectDockerSpawner, self).get_args() |
| + | 519 if (not self._user_set_cmd) and self.dobleArguments: |
| + | 520 args = [] |
| + | 521 return args |
| + | 522 |
| + | 523 |
| + | 524 #def get_command(self): |
| + | 525 # cmd = super(ProjectDockerSpawner, self).get_command() |
| + | 526 # return cmd |
| + | 527 # |
| + | 528 # ''' |
| + | 529 # if self._user_set_cmd: |
| + | 530 # cmd = self.cmd |
| + | 531 # else: |
| + | 532 # image_info = yield self.docker("inspect_image", self.image) |
| + | 533 # cmd = image_info["Config"]["Cmd"] |
| + | 534 # return cmd + self.get_args() |
| + | 535 # ''' |
| + | 536 |
| + | 537 |
| + | 538 def template_namespace(self): |
| + | 539 d = super(ProjectDockerSpawner, self).template_namespace() |
| + | 540 if self.group_id >= 0: |
| + | 541 d['groupname'] = self.get_groupname() |
| + | 542 return d |
| + | 543 |
| + | 544 |
| + | 545 def get_groupname(self): |
| + | 546 gname = '' |
| + | 547 if self.group_id >= 0: |
| + | 548 gname = grp.getgrgid(self.group_id).gr_name |
| + | 549 return gname |
| + | 550 |
| + | 551 |
| + | 552 def get_env(self): |
| + | 553 env = super(ProjectDockerSpawner, self).get_env() |
| + | 554 if self.group_id >= 0: |
| + | 555 #env.update(NB_GID=self.group_id) |
| + | 556 import grp |
| + | 557 gname = self.get_groupname() |
| + | 558 env.update(NB_GROUP=gname) |
| + | 559 return env |
| + | 560 |
| + | 561 |
| + | 562 def start(self): |
| + | 563 name = self.user.name |
| + | 564 user_data = pwd.getpwnam(name) |
| + | 565 user_gid = user_data.pw_gid |
| + | 566 gid_list = os.getgrouplist(name, user_gid) |
| + | 567 |
| + | 568 work_dir = self.notebook_dir |
| + | 569 self.volumes['jupyterhub-user-{username}'] = work_dir |
| + | 570 |
| + | 571 for gid in gid_list: |
| + | 572 gname = grp.getgrgid(gid).gr_name |
| + | 573 if gname.startswith("project-"): |
| + | 574 dirname = gname.replace("project-", "") |
| + | 575 self.volumes[gname] = work_dir + '/projects/' + dirname |
| + | 576 |
| + | 577 return super(ProjectDockerSpawner, self).start() |
| + | |
| + | #br |
| + | |
| + | **** NSLDockerSpaewner [#rdae5a79] |
| + | #br |
| | | |
| *** Trouble Shooting [#j137c8ff] | | *** Trouble Shooting [#j137c8ff] |
| | | |
| **** start.sh [#lb268269] | | **** start.sh [#lb268269] |
- | - [[start.sh>./start.sh]] | + | - [[start.sh(改)>./start.sh]] |
| #br | | #br |
| | | |