v2μμλ use_sudo=True
맀κ°λ³μκ° λ μ΄μ μ‘΄μ¬νμ§ μμ΅λλ€.
μ격 νΈμ€νΈμμ νμΌμ 볡μ¬νλ €κ³ νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
Traceback (most recent call last):
File "env/bin/fab", line 9, in <module>
load_entry_point('fabric==2.0.0', 'console_scripts', 'fab')()
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/program.py", line 332, in run
self.execute()
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/program.py", line 480, in execute
executor.execute(*self.tasks)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/executor.py", line 133, in execute
result = call.task(*args, **call.kwargs)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/invoke/tasks.py", line 127, in __call__
result = self.body(*args, **kwargs)
File "/home/tim/Workspace/wintest/fabfile.py", line 131, in nginx
context.put(StringIO(nginx_conf), remote='/etc/nginx/sites-enabled/website')
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/fabric/connection.py", line 639, in put
return Transfer(self).put(*args, **kwargs)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/fabric/transfer.py", line 213, in put
sftp.putfo(fl=local, remotepath=remote)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 683, in putfo
with self.file(remotepath, 'wb') as fr:
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 341, in open
t, msg = self._request(CMD_OPEN, filename, imode, attrblock)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 780, in _request
return self._read_response(num)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 832, in _read_response
self._convert_status(msg)
File "/home/tim/Workspace/wintest/env/lib/python3.5/site-packages/paramiko/sftp_client.py", line 863, in _convert_status
raise IOError(errno.EACCES, text)
PermissionError: [Errno 13] Permission denied
μ΄κ²μ http://docs.fabfile.org/en/latest/upgrading.html#id15μ λ¬Έμνλμ΄ μμ΅λλ€. μ΄κ²μ λν μ’μ λ¨μΌ λͺ
λ Ή λ체νμ΄ μλ κ² κ°μ΅λλ€. μλ₯Ό λ€μ΄ c.sudo("install β¦ /dev/stdin /path/to/remote")
λ₯Ό μ¬μ©ν μ μμΌλ©° tee
μ μ¬μ©μ λ°©ν΄νλ sudo()
μ λ²κ·Έκ° μλ κ²μΌλ‘ 보μ
λλ€. tee
(μ’
λ£λμ§ μκ³ λͺ
λ Ήμ΄ μ
λ ₯μ κΈ°λ€λ¦¬κ³ μλ μνλ‘ λ‘λλ€).
λ€μμ μμ νμΌ λμ€λ₯Ό μννλ λ° μ¬μ©ν κ²μ λλ€. μ΄λ νμΌμ μλνμ§ μμ κΆνμ λ¨κΈ°μ§ μλλ‘ νμ ν΄μΌ νλ μΌμ λλ€.
def sudo_install(connection, source, dest, *, owner='root', group='root', mode='0600'):
"""
Helper which installs a file with arbitrary permissions and ownership
This is a replacement for Fabric 1's `put(β¦, use_sudo=True)` and adds the
ability to set the expected ownership and permissions in one operation.
"""
mktemp_result = connection.run('mktemp', hide='out')
assert mktemp_result.ok
temp_file = mktemp_result.stdout.strip()
try:
connection.put(source, temp_file)
connection.sudo(f'install -o {owner} -g {group} -m {mode} {temp_file} {dest}')
finally:
connection.run(f'rm {temp_file}')
μλ₯Ό λ€μ΄ νΈμΆλ¨
<strong i="14">@task</strong>
def install_mount_status_monitor(conn):
sudo_install(conn, override_file, "/etc/systemd/system/mount_status_monitor.service.d/override.conf")
μ¬μ©μμ ν λλ ν 리 μΈλΆμ μλ μ격 μλ²μ λ‘컬 νμΌμ 볡μ¬νλ €κ³ ν λ μ¬μ©ν κ²μΌλ‘ μμλλ κ²½λ‘μ λκΉ?
Fabricμ μ¬μ©νκ³ νμΌμ /etc/nginx/μ 볡μ¬νλ λ°©λ²μ 무μμ
λκΉ? upload_template
λ±μ μ¬μ©νλ fabric2 λ°©λ²μ μ°ΎμΌλ €κ³ ν©λλ€.
@geoffrey-eisenbarth νμ¬λ‘μλ μ΄μ λν "μΆλ³΅λ°μ" μ κ·Ό λ°©μμ΄ μμ΅λλ€. http://www.fabfile.org/upgrading.html#file -transferμμ sudoμ λν λ΄μ©μ μ°Έμ‘°νμΈμ.
μ§κΈμ λ€μκ³Ό κ°μ κΈ°λ³Έμ μΈ μμ μ νκ³ μΆμ κ²μ λλ€.
c.put("path/to/local/nginx.conf") # implicit to remote $HOME
c.sudo("mv nginx.conf /etc/nginx/") # again implicitly with a CWD of $HOME
κ°μ₯ μ μ©ν λκΈ
@geoffrey-eisenbarth νμ¬λ‘μλ μ΄μ λν "μΆλ³΅λ°μ" μ κ·Ό λ°©μμ΄ μμ΅λλ€. http://www.fabfile.org/upgrading.html#file -transferμμ sudoμ λν λ΄μ©μ μ°Έμ‘°νμΈμ.
μ§κΈμ λ€μκ³Ό κ°μ κΈ°λ³Έμ μΈ μμ μ νκ³ μΆμ κ²μ λλ€.