일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- XSS
- NUGU
- 취약점
- 안전결제
- speed-measure-webpack-plugin
- shell_gpt
- 많다..
- 로맨스스캠
- 모의해킹
- CJ대한통운 #쿠팡 #통관번호오류 #통관고유번호오류 #안주원팀장 #모건인베스트
- Malware Sample
- ssrf
- 보이스피싱 #대검찰청 #명의도용 #비밀번호 #계좌번호 #공공기관 #가짜검찰청
- Frida
- 변태는
- Sequoia
- MongoDB #NoSQL #CreateUser #DropUser #mongod #mognod.conf
- 중고나라
- 네이버카페
- CryptoJS
- esbuild
- 허리디스크
- 채팅환전사기
- ue4dumper
- self-signed
- 거래사기
- intelmac
- 척추관협착증
- open redirect
- react
Archives
- Today
- Total
annyoung
flask with libreoffice (docx to pdf) 본문
docx에서 pdf로 변환하는 API를 만들고 있는데, 여러 이슈가 발생했다.
첫 번째로, docx 생성을 위해 tmp
디렉토리에 접근이 불가능한 에러가 발생했다. (/tmp/
가 아닌 실행 경로의 ./tmp
이다.)
PermissionError: [Errno 13] Permission denied: 'tmp/17b2e17c-17ed-4a02-8a3b-e9a9e5e17758.docx'
이 이슈는 uwsgi가 www-data 권한으로 돌아가고 있기 때문인데, ./tmp
는 root:root로 설정되어 있기 때문에 골머리 썩기 싫기 때문에 uwsgi 돌리는 권한을 root 퍼미션으로 줬다.
그리고, libreoffice
와 관련된 모든 파일들도 root 권한으로 설정되어 있기 때문에 어쩔 수 없이 uwsgi 권한도 root로 주는게 맞다고 본다.
systemd에 등록해 놓은 데몬에서 다음과 같이 User, Group을 root로 주고 서버를 재시작했다.
[Unit]
Description=uWSGI instance to serve copies-
After=network.target
[Service]
#User=www-data
#Group=www-data
# Sorry for root... smlee....
User=root
Group=root
이로써 docx가 생성은 됐으나 두번째 이슈가 발생했고 컨버팅된 파일을 찾을 수 없다고 한다.
FileNotFoundError: [Errno 2] No such file or directory: 'tmp/201b182f-4276-48c4-9bfa-d2f76163c016.pdf'
이 말은, docx는 생성이 됐으나 컨버팅이 안됐다는 뜻인데, uwsgi 로그를 보니 다음과 같은 에러가 발생했다.
/usr/bin/libreoffice: 46: dirname: not found
/usr/bin/libreoffice: 48: basename: not found
/usr/bin/libreoffice: 49: sed: not found
/usr/bin/libreoffice: 49: ls: not found
/usr/bin/libreoffice: 51: dirname: not found
/usr/bin/libreoffice: 145: grep: not found
/usr/bin/libreoffice: 151: uname: not found
/usr/bin/libreoffice: 191: exec: /var/www/copies-server/oosplash: not found
뭔 에러지..? 보아하니 다음 이슈와 같았다.
https://ask.libreoffice.org/t/ce-usr-lib64-libreoffice-program-soffice-line-54-dirname-command-not-found/32388
그래서 뭔가 환경변수 에러인것 같아서 환경변수를 뽑아보니 다음과 같이 `PATH`에 대한 환경변수가 다음 뿐이었다.
{'LANG': 'C.UTF-8', 'PATH': '/var/www/copies-sever/venv/bin', 'HOME': '/root', 'LOGNAME': 'root', 'USER': 'root', 'SHELL': '/bin/sh', 'INVOCATION_ID': '6afea86fbb584ea09f9fd8641a245363', 'JOURNAL_STREAM': '8:656648', 'UWSGI_RELOADS': '1', 'UWSGI_ORIGINAL_PROC_NAME': '/var/www/copies-server/venv/bin/uwsgi'}
root 계정에서 echo $PATH
를 통해서 환경변수를 출력하고, 나온 결과를 uwsgi에 통째로 삽입했다.
root@ip-172-31-40-67:/var/log/uwsgi/app# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[uwsgi]
...
env=PATH=/var/www/copies-server/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
그랬더니 에러없이 컨버팅도 되고 다운로드도 되고 정상적으로 동작한다.
'프로그래밍' 카테고리의 다른 글
https local domain with self-signed certificate (0) | 2022.04.15 |
---|---|
CRACO React esbuild with speed-measure-webpack-plugin (0) | 2022.03.24 |
아이폰 코로나 알림이 네이버 업데이트 (0) | 2022.01.23 |
react ckeditor5 build with craco without eject (0) | 2021.12.30 |
react-bootstrap-table-next row read, add, update and delete (CRUD) (0) | 2021.12.28 |
Comments