sed CPU 점유하면서 멈추는 현상에 대해서.

사랑천사의 이미지

안녕하세요?

Gentoo 사용자 입니다.
sed가 돌아가는데 항상 그런건 아니지만 특정 상황에서 무한 반복에 빠지는지 어쩐지 모르겠지만 CPU를 전부 점유하면서 동작이 멈추질 않습니다. 쉽게 말해 sed 프로세스가 다운된 것과 같습니다.

중요한 것은 이게 프로그램 빌드 중에 나타난 현상 입니다.
살펴 보니

sed "s|/usr/local/sbin/|/usr/sbin/|g" smartd.initd.in > smartd.initd

이거더군요. 그래서 그냥 해당 파일을 복사해다가 직접 수행시켜 봤습니다. 결과는 성공했습니다. 아무 오류 없이 잘 넘어 가더군요. 그런데 왜 빌드 과정에서만 저러는 건지 모르겠네요. 4.1.5 까진 괜찮았는데 4.2 부터 저러네요.

단순히 sed 문제가 아닐 수도 있을 거 같고 조금 복잡합니다. 이걸 여기다 올리는게 맞을지 모르겠네요. 설치 활용 QnA에 올려야 될 거 같은 기분이네요.

사랑천사의 이미지

ps로 보니 해당 명령이 문제가 아니라 그 다음에 있는 sed 명령이 문제인 거 같습니다. 그런데 그 다음에 나오는 sed 명령줄은 너무 길어서 ps에서 다 안 나오네요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

사랑천사의 이미지

sed 문제가 맞는 거 같긴 한데 왜 그러는지 모르겠네요.

echo '/* svnversion.h.  Generated by Makefile from Id strings.  */' > svnversion.h
(cd . && cat CHANGELOG Makefile.am configure.in smart*.in *.cpp *.h *.s) \
	| sed -n 's,^.*\$[I][d]: [^ ]* \([0-9][0-9]* [0-9][-0-9]* [0-9][:0-9]*\)[^:0-9][^$]*\$.*$,\1,p' \
	| sort -n -r \
	| sed -n 'h;s,^\([^ ]*\) .*$,REV  "\1",p;g;s,^[^ ]* \([^ ]*\) .*$,DATE "\1",p;g;s,^[^ ]* [^ ]* \([^ ]*\)$,TIME "\1",p;q' \
	| sed 's,^,#define SMARTMONTOOLS_SVN_,' >> svnversion.h

위 코드가 실행되는 과정에서 오류가 생깁니다 정확히는. pipe를 타고 뭔가 넘어오면서 오류가 나는 건지 그게 아니면 sed자체가 정말 이상한 건지 알 수가 없네요. 정규표현식이나 sed 사용에 대해 깊히 아는게 아니라서 뭐가 문제가 있는진 잘 모르겠구요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

ydhoney의 이미지

빌드과정이 쉘 스크립트로 되어있다면

#/bin/sh

#!/bin/bash

뒤에 -x -v 옵션을 추가하신 후에 재실행해보세요.

--
Linux/Unix System Engineer를 위한 다락방
http://cafe.naver.com/sedarak

사랑천사의 이미지

... 그걸... 제가 조정할 수 없습니다. Gentoo 자체가 자동화된 빌드 시스템을 사용하는데 이 빌드 시스템 자체가 어떤 빌드 과정을 거치기 때문에 제 마음데로 조정이 안 됩니다. 물론 ebuild가 있지만 configure 돌린 다음에 make를 돌리는데 make에서 저럽니다.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

Undisputed의 이미지

"4.1.5 까진 괜찮았는데 4.2 부터 저러네요."

요 말씀을 무시하면...

추측컨데~

svnversion.h를 만들기 위해서
CHANGELOG Makefile.am configure.in smart*.in *.cpp *.h *.s
를 검색하는데, CHANGELOG 버전형식이 기존과는 달라서 svnversion.h이 제대로 생성되지 않은 결과
"sed" 다음 명령이 실행되지 않는 건 아닐까요? :)

SMARTMONTOOLS 개발자가 버전관리 방법을 바꿨을 수도 있구요..

사랑천사의 이미지

가능성 있는 이야기일 거 같습니다.
다만, 4.2 부터 왜 그런지 저러고 있고 smartmontools 말고도 GNOME 일부 꾸러미 깔 때도 정확히 저런 패턴인지 알 수 없지만 무한 반복에 빠지는 것인지 어떤 내부적이 오류가 있는 것인지 저런 식으로 멈춰 있습니다. CPU 점유는 sed 하나가 100% 다 먹고요. 빌드는 진행 안 되고... smartmontools 같은 경우는 저렇게 빌드 되면서 중간에 저러지만 GNOME 같은 경우는 빌드에선 sed가 잘 안 쓰이는지 상관 없는데 빌드 시스템이 빌드를 끝내고 설치 스크립트가 불려질 때 그 과정에서 그럽니다. installing ... ... 이러는 곳이조 아마.. 여기서 sed로 뭔가를 치환하고 파일을 복사하는 거 같은데... 도대체 뭐가 문제인지 감이 안 잡힙니다.

그런데 또 보면 다른 Gentoo 사용자 분들은 별 문제 없이 쓰시는 거 같고... 얼마 전까진 4.1.5가 사용 가능했는데 지금은 빌드에 필요한 메타데이터 트리에서 빠저 버리면서 4.2 부터만 사용할 수 있게 되어 버렸습니다. 그래서 이런걸 어떻게 잘 넘어갈 방법이 있는 것도 아니고 상황이 복잡하네요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

ego80v의 이미지

저도 패키지 업데이트하다 4~5번 정도 겪었었는데,
시스템 character set 문제였던것 같습니다.

기록을 남기지 않아 정확하진 않으나, LANG 변수값이 ko_KR.euckr 에서 발생했던것 같네요.
ko_KR.utf8 로 변경후 재 컴파일 하니 해결되었던것 같습니다.

컴파일 완료후 다시 ko_KR.euckr 로 복구했었구요..

사랑천사의 이미지

그러고 보니 EUC-KR 에서만 그랬던 거 같네요. UTF-8 환경에선 아무런 문제가 없었던 거 같기도 하네요 생각해 보니. 한 번 해 봐야 겠습니다. 서버가 EUC-KR 이어야만 하는 환경이라(EUC-KR, CP949만 지원되는 Telnet 클라이언트 사용자가 많다 보니 어쩔 수 없네요.) 이런 일이 벌어지는 거 같군요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

사랑천사의 이미지

EUC-KR이 아니면 정말 괜찮네요. UTF-8, ISO-8859-1에서 아무 문제가 없네요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사

ego80v의 이미지

가물했던 기억이
타이핑 하면서 새록새록 다시 찾아오더라구요.
즐거운 하루 되세요~ ^^;;

사랑천사의 이미지

별 말씀을요. 제가 오히려 감사하조. 한참 해맸을 겁니다 댓글 안 달아 주셨으면요.
-- 사랑천사 --
LECL | Blog
yeosong@gmail.com
yeosong@gmail.com(네이트온) ysnglee2000(Skype)

사람천사