티바이트



예전에 '온라인저지 구축기' 라는 글을 올린 적이 있었는데, HUSTOJ가 버전업이 계속 되었고, 설치방법에 대한 문의가 있어 다시 적어봅니다.


설치 OS : Ubuntu 16.04.2 LTS

HUSTOJ repo : https://github.com/zhblue/hustoj (2018년 2월 28일 버전)



1. git을 설치한다.

sudo apt-get install git 



2. git clone으로 저장소에서 파일을 복사해온다.

아래 명령어는 항상 최신 버전을 받아오기 때문에, 이전 버전이 필요하다면 github에서 이전 커밋을 찾아보아야 한다.

git clone https://github.com/zhblue/hustoj



3. 받은 파일의 trunk/install 경로에서 install-ubuntu16+.sh 파일을 실행한다.

여기서는 문제 발생을 위해 기본 설정을 따를 것이므로, mysql이나 nginx가 이미 설정되어 있는 환경에서는 충돌이 발생할 수도 있다. (위의 repo에서 Docker 이미지도 제공하고 있으므로, 도커 사용에 익숙하다면 해당 이미지를 이용하여 쉽게 설치할 수 있다.)

sudo bash ./install-ubuntu16+.sh



4. 설치 도중에 mysql을 설치하고, 비밀번호를 설정하는 창이 나온다. 비밀번호를 입력하여 설치를 계속한다.


5. 수 분을 기다리면 설치가 완료된다. 경우에 따라 경고 메시지가 뜰 수 있는데, 심각한 내용이 아니면 일단 넘어간다. judge 라는 리눅스 계정이 생성되고, /home/judge 라는 홈 디렉터리가 만들어진다. 이 경로에 들어가서 파일이 제대로 설치되있는지 확인한다.



6. ps -ef | grep judged 를 실행하여 judged 데몬이 제대로 실행되고 있는지 확인한다.



7. 브라우저를 열고 127.0.0.1 (원격 접속중이라면, 해당 서버의 IP) 으로 접속하여 페이지가 잘 나오는지 확인한다.



8. /home/judge/src/web/include/db_info.inc.php 을 수퍼유저 권한으로 열어서(sudo) 언어를 수정한다. 언어 설정과 관련되어 있는 'cn'(중국어)이 2개 있다 이것을 en으로 바꿔준다.

zh-CN 라고 되어있는 것은 en-US로 수정한다.



9. 이제 관리자 계정을 생성해야 하는데, 기본 관리자 계정이 없어서 아이디를 만들고 DB를 수정해야 한다. 상단의 Login 메뉴에서 회원가입을 한다.



10. mysql -u root -p로 mysql 클라이언트를 열고 4번에서 지정한 비밀번호를 입력한다.



11. use jol; 을 입력하여 데이터베이스를 선택한다.



12. INSERT INTO privilege(user_id, rightstr) VALUES('생성한 아이디', 'administrator'); 쿼리를 입력하여 유저권한을 지정한다.



13. exit를 쳐서 DB에서 빠져나온다.



14. 9번에서 만든 관리자 ID로 로그인한다. 문제와 테스트케이스를 만들고 저장한다. 추가적인 테스트케이스를 입력하라는 버튼이 나오는데, 이 페이지는 다음에 다시 들어갈 수 있다. 관리자 페이지와 문제 추가에 대한 설명은 생략한다.



참고) 테스트용 문제를 추가할 때, 입력 테스트케이스에 아무 숫자나 입력하고, 출력 테스트케이스에는 Hello 등의 간단한 문자열을 지정한다. 그러면 테스트용 코드를 작성할 때 간단하다. 테스트 케이스를 입력하지 않으면 채점이 되지 않을 수도 있다.



15. 관리자 페이지에서 빠져나와, 문제를 풀고 평가가 제대로 되는지 확인한다. Pending이 지속되지 않고, Accepted 혹은 Wrong Answer, Compile Error 등의 결과가 나오면 성공!


16. 관리 페이지의 문제 리스트에서 Reserved 되어 있는 문제의 status를 클릭하여 Available 상태로 만든다. 이 상태가 되면 관리자가 아닌 일반 유저도 문제를 볼 수 있게 된다.




※ Troubleshootings

- /home/judge/ 디렉터리 내에서 hustoj 관련 파일을 찾을 수 없을 때

install-ubuntu16+.sh 파일 실행 중에 실패한 것이다. 슈퍼유저 권한을 주지 않고 실행했거나, 기존에 설치되어 있던 mysql 또는 nginx 설정과 충돌했을 가능성이 있다. install 파일을 실행할 때 발생한 출력 메시지를 확인하여 에러를 수정한다.


- 웹 사이트가 뜨지 않을 때

에러 메시지에 따라 nginx나 mysql 설정을 확인한다. (구글링..)


- 코드를 제출했는데 pending 상태에서 무한히 대기할 때

ps -ef | grep judged 명령으로 judged 데몬이 실행중인지 확인한다. 실행중이라면 프로세스를 (kill -9 등으로) 죽이고 재실행해 본다. 실행중이 아니라면, 실행한다.(sudo service judged start)

문제가 해결되지 않으면 /home/judge/src/core/judged 경로로 들어가 해당 프로세스를 포그라운드로 실행하여 에러 메시지를 확인 후 조치한다. 파일 접근 권한 문제이거나 DB 접속 문제라면 관련 에러가 뜰 것이다.

만약 아무 에러도 뜨지 않는다면, 관리 페이지에서 테스트케이스 데이터를 확인해 본다.


- 입력 테스트케이스의 문자열 길이가 잘못 측정될 때

테스트케이스 추가페이지에서는 줄바꿈에 \r\n을 사용한다. 이 부분은 관리페이지의 내부 php 코드를 수정하여 캐리지리턴(\r)을 빼고 라인피드(\n)만 저장되도록 수정해야 한다. (이런 잔문제들이 많다..)




HUSTOJ를 사용하여 https://judge.zetagate.com을 운영하고 있었으나, 여러가지 문제가 많고, 확장성이 없다고 판단하여 새로 제작 중이다. https://github.com/ice-judge 아직 Github 저장소만 만들어 놓은 시작 단계다...




 


  1. hustoj 구축에 많은 도움 되었습니다. 감사합니다.

  2. 혹시 judge 계정 생기는 부분에서 judge계정 로그인 할때 비밀번호가 설정되어 있는데
    sudo bash ./install-ubuntu16+.sh 이 명령 수행 중 입력했던 비밀번호가 이 계정의 비밀번호가 되는건가요??

    • 아니요, sh 실행시 입력하는 패스워드는 sudo 권한을 얻기 위한 것입니다.
      judge 계정 비밀번호는 스크립트에서 어디서 설정하는지 기억이 잘 안나는데.. 리눅스의 계정 관련 명령어로 바꿀 수 있습니다.

    • 이영현 2018.11.07 20:13 신고

      아아 그렇군요 감사합니다 ㅎㅎ

    • 이영현 2018.11.07 21:27 신고

      그 홈페이지 로그인 관련해서 회원가입을하고 다시 로그인을 하려고 하면 아이디와 비밀번호를 못찾는 현상이 발생하는데 제 생각엔 회원가입할때 입력한 아이디와 비밀번호가 입력되지 않거나 불러오는 과정에서 문제가 생기는것 같은데 혹시 이부분에 대해서는 어디서 수정해야되는지 알수 있나요??

    • 혹시 이미 해결하셨나요? DB의 users 테이블에 유저정보가 정상적으로 들어있는지 확인해보세요 (비번은 해시되어 있습니다)

  3. sudo bash ./install-ubuntu16+.sh 명령어 수행 후 mysql 비밀번호 설정창이 안나오는 경우 어떻게 해야 하나요?

    • mysql 비밀번호 설정창은, mysql 서버를 처음 설치할 때 나옵니다. 만약 설치 과정은 정상적으로 진행되는데, mysql 비번설정창이 나오지 않는 경우라면, 이미 mysql이 설치되어 있는 상태일 수 있습니다. admin 계정으로 로그인을 시도해 보세요.
      만약 비밀번호를 분실하셨다면 이 글을 참고해 보세요 https://stackoverflow.com/questions/10895163/how-to-find-out-the-mysql-root-password

  4. 과정을 따라 해보았는데 6번 이후에 127.0.0.1 브라우저를 열었을때 빈 화면이 뜹니다. 이건 무슨 문제인지 알 수 있을까요??

  5. 안녕하세용 무한히 pending에서 벗어나지 못하고 있는데요, 프로세스를 죽였다 살려도 해결되지 않습니다. 다른 해결방법 없을까요?

댓글을 다는 공간입니다. (로그인하지 않아도 댓글을 남길 수 있습니다.)



게시판 목록은 좌측상단에 있습니다.

Statistics Graph