Indy with Lazarus/ko

From Free Pascal wiki
Jump to: navigation, search

Deutsch (de) English (en) español (es) 日本語 (ja) 한국어 (ko)

라자루스용 인디

인디를 포팅하려는 새로운 시도가 인디 핵심 팀에 의해 착수되고 있다. FPC개발자 마르코 반 데 보르트는 FPC4Lazarus와 완벽하게 작동시키기 위해 인디 코어 포팅 작업하고 있다. 특히 인디의 JP무가스가 FPC와 함께 작업하게 하는 데 크게 기여했다. 대부분의 백엔드는 대부분 그의 작업이기도 하다.


현재 Indy10은 거의 완벽하게 작동하고 있으며, 최종 사용자의 사용 편의성이 크게 개선되었습니다. OpenSSL 및 압축과 같은 특수 주제에만 추가적인 지식이 필요할 수 있습니다. 64비트 지원은 완전하게 검증되지 않았습니다.

힌트: 카일릭스 인디를 지원할 생각이 없다. (libc unit을 사용한 모든것). 네이티브 유닉스 RTL을 이용한 것만 포팅할 것이다.

요구사항

현재, FPC 2.0.4버전 이상에서 일부버그를 제외한 사용 가능합니다. (FreeBSD/Mac OS X:서버버그 2.1.1버전이상)

이제 Indy10은 모든 주요 대상에서 작동하기 때문에 우리는 이버전에 초점을 맞춥니다.

Indy9로 변환이 사람들을 위해 간단 할 수도 있지만,그것은 단지는 Win32에서 작동하는 것을 명심하십시오. (그리고 이론적으로 리눅스/x86에 이식 할 수있다).

그러므로 가급적 인디10을 사용할 것을 추천합니다.

(indy9의 예를 들자면,텔넷 구성 요소가 작동하게하는 tmemorystream.setsize 의 오버라이딩을 제거 할 필요가있을 수 있습니다,하지만 Indy9은 한 동안 테스트되지 않았습니다)


이 포트는 매우 안정적이며, JP 무가스(JP Mugaas)는 릴리스의 품질, 포함 메이크 세트를 개선하기 위해 많은 일을했다

다운로드/링크

현재 스냅샷들(for die hards only)

동작 기능과 미구현 기능

Indy9:

  • 윈도우에선 대부분 동작한다. 거의 모든 데모가 포팅되었습니다.
  • 리눅스에선 거의 동작 하지 않는다. Linux/x86계열(카이릭스 제외)을 제외한 대상은 희망이 없습니다. <-- 거의 모든 리눅스에서 동작하지 않는다(주)

Indy10:

  • 윈도우, 유닉스: 클라이언트 동작, 원칙적으로 서버 역시 동작한다.
  • 유닉스 RTL의 주요기능은 동작한다. OS X, FreeBSD의 서버,클라이언트도 동일하게 동작한다.

모든버전: 보안관련 기능은 아직 테스트 되지 않음.

단기 개발 계획

  • 데모 소스를 동작하도록 변환 예정.
  • 버그 수정 및 FPC와 Indy RCS를 재수정 할 계획.

문제점들

  • Indy9 및 Indy10 사용에 따른 공통적인 문제, 배포에 발생하는 문제들, 심지어 기본적인 문제점들:
    • Indy9 더 사용되고, 업계에서 입증 된 것입니다.
    • Indy10 은 보다 나은 이식성을 가지고 있습니다. 그러나 이식률은 낮습니다. 더이상 인디 어디에서도 움직임은 보이지 않습니다 (개선되지 않고 있습니다)
  • 배포는 어떻게? 라자루스에 속할지,FPC에 속할지.
  • 많은 패키지와 데모에 다양한 경로(PATH)가 있습니다. 경험이 부족한 개발자가 새로 구축할 수 있도록 문제를 해결하는 방법은 무엇입니까?
  • 라자루스 문제점들
    • 아이콘 사라지는문제
    • 해결 인디컴포넌트 구성 탭에 요소가 많아 질 경우, 스크롤 되지 않아 선택할 수 없습니다.: JP Mugaas는 인디 클라이언트를 A-M 그리고 N-Z 등으로 분리했습니다. 또한 탭당 2개의 행으로 변경하였습니다.
  • 인디 데모 (특히Indy10)는 멀티 플랫폼 사용에 매우 적합하지 않습니다. 설정은 윈도우에 특화되어있으며, 공백이 있는 경로, 깊은 디렉토리, 쓸모없는 코드(C# 코드)가 있습니다. 빠른 시간 안에 데모는 재작성되어야 합니다.

버그

  • Indy10 서버는 시작 시 예외가 발생하여 종료되기 때문에 동작하지 않는다. FPC 2.2(.0) 또는 그 이상 버전에서 수정되었다.(pthread_kill 문제). 이 문제는 Max OS X에서도 동일하게 나타난다.
  • 데모를 변환시에, 빈번하게 바인딩 프로버티(속성)가 잘못 변환 되었다. 이러한 원인은 인디가 IP4와 IP6를 동시에 사용해서 동일한 포트로 바인딩 하는것 때문에 비정상적으로 동작 할 수 있다.
  • Ubuntu 10.04 + Lazarus 0.9.28 + Indy 10(Server Component) -> launch & do nothing (just crash)

해결방법 (bruce0829@yahoo.com.tw collect and organize data):

(1).Lazarus Main menu -> Project -> Compiler Options -> Other Page , add the "-dUseCThreads" parameter.

(2).force the IdTCPServer to work in Id_IPV4 mode.

procedure TForm1.FormActivate(Sender: TObject);
var
  Binding: TIdSocketHandle;
begin 
  //uses idGlobal
  //explicitly adding a Binding object prevents TIdTCPServer
  //from creating its own default IPv4 and IPv6 Binding objects
  //on the same listening IP/Port pair...
  //바인딩 개체를 명시적으로 추가하면 TIdTCPServer가 
  //동일한 수신 IP/포트 쌍에 자체 기본 IPv4및 IPv6바인딩 
  //개체를 생성할 수 없습니다.
  Binding := IdTCPServer1.Bindings.Add;
  Binding.IPVersion := Id_IPv4; //optional: forces the Binding to work in Id_IPV4 mode.
  Binding.IP := '127.0.0.1';
  Binding.Port := 6501; //customization 
  IdTCPServer1.Active := True;  
end;

(3)TIdSync를 사용하여, IdTCPServer의 OnExecute() 함수로 GUI를 제어할 수 있습니다.

설치방법

이방법은 완벽하지 않지만,원한다면 다음과 같이 설치를 할 수 있다. :Matthijs

  • indysystemlaz.lpk 열고 컴파일
  • indycorelaz.lpk 열고 컴파일
  • indyprotocolslaz.lpk 열고 컴파일
  • dclindycorelaz.lpk 열고 컴파일 후 설치
  • dclindyprotocolslaz.lpk 열고 컴파일 후 설치

라자루스 리빌드 후 15개의 인디 컴포넌츠 탭을 볼 수 있을 것이다.

데비안/우분투 설치방법

# cd indy-10.2.0.1/fpc
# chmod +x debian/rules
# touch README
# sudo apt-get install fakeroot
# dpkg-buildpackage -rfakeroot -uc
# cd ..
# sudo dpkg -i *.deb
  • install package indylaz.lpk in lazarus

리눅스 설치방법[2]

위의 팁으로 라자루스 Indy를 설치하지 못할 경우,이방법을 시도 할 수 있습니다. - Yahoo! Brazil, Lazarus Group (User Everaldo)

라자루스 0.9.24 버전에서 indy-10.2.0.1 버전 기준

  • 압축을 풉니다
  • 디렉토리$(LazarusDir)\구성 요소\indy-10.2.0.1\로 이동하여"저장된 "디렉토리를 생성합니다.
  • 위에서 만든 디렉토리에$(LazarusDir)\구성 요소\indy-10.2.0.1\lazarus\를 "저장된 "디렉토리에 복사합니다.
  • 디렉터리$(LazarusDir)\구성 요소\indy-10.2.0.1\fps\를 디렉터리$(LazarusDir\components)\로 복사합니다.
  • "저장된 "디렉터리의 내용을 가져오고$(LazarusDir)\구성 요소\indy-10.2.0.1\lazarus내에 복사하고, 다운받았던 압축 내용은 지워도 됩니다 (주:그럴꺼면 이동을 시키지 ㅡㅡ)
  • laz.pek($(LazarusDir)\구성 요소\indy-10.2.0.1\lazarus\indis)패키지를 기존 방법으로 설치합니다.

리눅스 상 경로 : /usr/lib/lazarus/components/indy-10.2.0.1/

윈도우 설치 방법[3], Indy 10.5.8.0 과 그 이상 버전

  • 동작하기 위해서 라자루스 (그리고 FPC)가 필요하다.
  • 인디 다운로드 : http://www.indyproject.org/Sockets/Download/DevSnapshot.EN.aspx.
    또는 현재 최신버전: http://indy.fulgan.com/
  • 디렉토리에 압축 풀기
  • *.pas, *.lrs and *.inc 파일을 \Lib\System, \Lib\Core, 그리고 \Lib\Protocols 하위 폴더에 복사하여 넣거나 새로운 폴더에 생성 후 선택
  • indylaz.lpk 파일을 \Lib 디렉토리에 복사 하거나 생성된 폴더에 복사 또는 선택
  • 라자루스 Package -> Open package file로 indylaz.lpk 열기
  • Package Options dialog 의 "Unit"필드에 인디 폴더 추가
  • 컴파일 후 설치(라자루스 리빌드). 수정: 현재,알려진 FPC 버그로, 설치 전 인디 TWICE 패키지를 컴파일 해야 한다.

인디10을 사용하려면 프로젝트 옵션 ->컴파일러 옵션->경로의 "Other Unit files (-Fu)"에 인디 디렉토리 추가 후 사용 하면 된다.

윈도우(기본) 설치방법 - Indy 10.2.03

많은 사용자들에게 위에 제시된 정보는 효과가 없거나 버전과 일관성 없는 설명의 차이를 감안할 때 다소 혼동을 줄 수 있다고 확신합니다.

이 웹 사이트는 스냅 샷 페이지에서 최신 버전을 다운로드하도록 안내합니다.
이 위키는 많은 파일을 디렉토리에 복사하라고 합니다.
저에게는, 효과도 없었고, 결국 설치된 라자루스도 엉망이 되고 말았습니다.
  1. 첫번째, 다음 사이트에서 인디 10.2.03 윈도우 버전을 받는다 URL.
    다른곳의 파일은 문제가 있으므로 가급적 이곳에서 받기를 추천한다.
  2. 압축을 풀은 곳에서 다음과 같은 폴더를 찾으세요 : "fpc" 와 "lazarus".
    1. "fpc" 폴더의 내용을 "라자루스디렉토리\fpc\버전\source\packages\indylaz"에 복사하세요.
    2. 라자루스 폴더를 다음 디렉토리에 복사하세요. "라자루스디렉토리\components\indylaz"
    3. 이 두가지를 모두 사용하는 경우에는 지정된 폴더 내에 하위 디렉토리가 없는지 확인하십시오.
      예) 라자루스디렉토리\components\indylaz\lazarus\
  1. 라자루스 메뉴중 "Package" -> "Open package file" 에서 "indylaz.lpk" 를 엽니다. "라자루스디렉토리\components\indylaz" 에 있습니다.
  2. "options"를 클릭합니다. 이 단추는 톱니 바퀴가 있는 설정이미지와 비슷한 이미지입니다.
  3. 왼쪽에 있는 "컴파일러 옵션"을 클릭하고"기타 장치 파일(-Fu)(구분 기호는 세미 콜론)"옆의 ".."버튼을 클릭합니다.
    위에서 생성한 "fps"폴더를 선택하고 OK(확인)를 클릭합니다.
    Lazarus(BR>라자루스)가 상대적 경로를 정렬해 드립니다. 바꾸지 마세요.
  4. OK를 클릭하고, 편집한 다음, 잘못된 설치 방법으로 제대로 설치 되지 않음을 이전의 문서를 만든 사람에게 항의 메일을 보내세요.

윈도우64비트 이슈사항

64비트에서는 아래의 코드가 정상적으로 동작 하지 않습니다. IdAntiFreeze.pas의 내용을 아래와 같이 수정하면 해결할 수 있습니다.

수정전:

type
  TIdAntiFreeze = class(TIdAntiFreezeBase)
  public
    procedure Process; override;
  end; 

수정후:

type
  TIdAntiFreeze = class(TIdAntiFreezeBase)
  public
    {$IFDEF WIN32}
    procedure Process; override;
    {$ENDIF}
  end;

외부 링크