Pharo with PHP Example(1)

그럴리는 없겠지만 PHP 와 Pharo(Smalltalk) 을 JSON 으로 연동하는 방법을 간단하게 작성해 봤습니다. Smalltalk 으로 서버프로그래밍까지 하려면 아무래도 문턱이 높으니… 단계별로 최대한 간단하게 작성해 봤네요. 혹시 필요하신 분이 있으시다면 한번쯤 읽어보는데 나쁘지는 않으실듯 합니다 😀

이제 삽질이 끝났으니 다시 본업이나 좀 해봐야겠….

http://workspace.onionmixer.net/mediawiki/index.php?title=Pharo_Json_PHP_Example_01

FreeBSD 를 pxeboot 를 이용해서 설치하는 경우에 대한 간단한 기록

일단 전제는 다음와 같았다.

 

  1.  오래된 노트북이어서 cdrom (또는 iodd등)으로 부팅이 안되는경우
  2. 유선 랜카드는 달려있는 경우
  3. 써먹을수 있는 서버는 linux 서버인경우

 

기본적인 컨셉은 다음과 같다.

  1. linux 서버에는 dhcp 서버와 tftp 와 NFS 를 세팅하는 것으로 한다.
  2. 노트북은 pxe 를 통해서 랜카드로 바로 부팅하는것으로 한다.

 

일단 노트북을 pxe 를 통해서 FreeBSD 로 부팅을 시키는것 까지는 어렵지 않았다(FreeBSD 11.0 rc1 booting 이미지를 사용) 그 과정을 간략하게 정리해보면 다음과 같다.

  1.  리눅스 서버에 dhcpd 를 설치해서 dhcp 서버를 세팅한다. 이때 dhcp 서버는 pxe 를 통해 network 상의 특정 MAC Address 를 가진 단말에게 pxeboot 이미지의 경로와 NFS 를 사용할 수 있는 정보를 던져준다
  2. 리눅스 서버에 tftp-ha 를 세팅한다. tftp 를 통해서 pxeboot 및 기본적인 정보를 필요로하는 단말에게 제공할 수 있게 된다.
  3. 리눅스 서버에 NFS 를 세팅해서 FreeBSD 설치에 대한 이미지를 사용할 수 있도록 한다.

 

기본적으로 본인은 dhcp 를 공유기 내부에서(dd-wrt) 처리하고자 했으나.. pxelinux 는 가능하지만 FreeBSD 는 이런 부분에 대해 그리 자유롭지 못하다. 방법을 한참 찾다가 linux 서버에 dhcpd 를 설정하니 생각보다 쉽게 해결되었다.

 

linux 서버에 tftp-ha 와 NFS 에서 사용하게될 파일을 세팅하였다. 배포되고 있는 FreeBSD booting iso 이미지를 loopback mount 해서 파일을 가져올 수 있도록 만든다음, tftp 와 NFS 에서 공통적으로 바라보게될 디렉토리 안쪽에 모두 내용을 복사하였다. pxeboot 에 사용될 tftp root 경로 안쪽의 boot 디렉토리 아래쪽의 몇가지 텍스트 파일을 손봐주면 준비는 ok.

 

그러나 한가지 문제가 생겼다. 이유는 잘 모르겠지만 FreeBSD 설치용 pxeboot 가 단말애서 실행은 되지만 웬지 모르게 NFS 로 된 root 가 계속 read-only 로 mount 되는 것이었다. 아마도 권한 문제일거라 생각은 되지만… 그걸 찾기에는 시간이 너무 지나버렸다.

 

혹시나 하는 마음에 usb cdrom 을 단말에 꼽았더니.. 부팅용으로는 인식되지 않던 usb 장비가 인식이 제대로 되는것이었다. 이때 FreeBSD 설치이미지 부팅과정에서 본 내용이 떠올랐다. 본인은 FreeBSD 의 구조에 대해 잘 알지는 못하지만… 대강의 내용을 보니 iso9660 의 spec 에서 허용하는대로 CDROM 의 볼륨레이블 내용대로의 이미지를 찾고 있는듯 했다…. 오호.. 그럼 방법이 있지 않을까? 해서 usb cdrom 에 FreeBSD booting 이미지를 매핑해서(iodd) 부팅을 시켰더니 일단은 성공적으로 usb 의 내용을 root 로 삼아 installer 가 실행되었다. 문제는 여기부터 다시 시작…

 

이렇게 부팅된 상태는 network device 를 인식은 하지만 IP 를 별도로 세팅하지 않는다. 이유는 잘 모르겠지만 말이다. installer 에서 shell 로 잠시 나온다음 ifconfig 과 route 를 이용해서 ip 과 gateway 는 수동으로 세팅해서 간신히 외부와  인터넷은 되게할 수 있지만….. 문제는 nameserver resolving 이다. /etc/resolv.conf 에 nameserver 에 대한 내용을 아무리 기입해도 shell 에서 exit 하는 순간, 관련된 값이 초기화 되어버린다. 이 부분이 왜 중요하냐면.. booting 이미지는 정말 부팅만 된다. 덕분에 설치에 필요한 각종 파일들을 서버에서 받아와야 하는데… domain resolv 를 하지못하니.. 덕분에 미러서버에 접근할 수도 없고.. 때문에 설치를 진행할 수가 없다. 그래서 /etc/hosts 에 해당되는 domain 을 static 으로 넣을까 했으나.. cdrom 에서 mount 된 부분이므로 역시 readonly 되어버려 편집을 할 수가 없게된다.

 

어떡할까 고민하다가.. 잘 생각해보니 CDROM 에서 booting 을 mount 한다면.. 그걸 DVD 이미지를 mount 할 수 있게도 가능하지 않을까? 해서 다음과 같은 과정을 간단하게 거쳐보았다.

  1.  기존의 tftp root 에 편집해두었던 boot 디렉토리를 백업받는다.
  2. tftp root 디렉토리에 있는 내용을 모두 지운다.
  3. FreeBSD  DVD iso 이미지를 loopback mount 해서 파일을 tftp root 로 모두 옮겨온다
  4. 백업받은 boot 디렉토리를 원상복귀 시키기 위해 tftp root 에 있는 boot 디렉토리를 지우고 아까 백업받은 내용을 이자리에 배치한다.

 

기본적으로 FreeBSD 역시 linux 와 마찬가지로 부팅이 되며 kernel 이 로딩되는 시점에서, bios 에서는 최소한의 정보만을 전달받고 나머지는 하드웨어를 다시 스캐닝 해서 정보를 구축한다. 덕분에 부팅시에 바로 인식이 안되던 usb cdrom 이 인식되는건데…. 여튼간에 위의 방법을 적용한다음 DVD 이미지를 usb cdrom 에 넣으니 제대로 부팅성공. 게다가 DVD 이미지이기 때문에 별도로 인터넷에 접근하지도 않는다. installer 를 통한 설치가 끝난 다음에는 network 과 root passwd 에 대한 설정을 마치고.. 재부팅하면 그걸로 성공.

 

 

아마도 당분간은 머리가 복잡해서 정리를 하지 않을듯하니 이렇게 간단한 형태로 기록을 남겨둔다. 사용한 인터넷상의 정보들은 내일 출근하면 이 글의 아래쪽에 별도로 정리할 예정.

 

=======================

FreeBSD 설치 및 기본세팅 – 한국어
http://blog.neo365.net/2678560
PXE Install (Network Installation) of FreeBSD from a Linux Box.
http://www.jzab.de/content/pxe-install-freebsd-linux
FreeBSD install over PXE(No NFS) – Need FreeBSD Machine
http://louwrentius.com/freebsd-101-unattended-install-over-pxe-http-no-nfs.html
Debian PXE install
http://louwrentius.com/automated-install-of-debian-linux-based-on-pxe-net-booting.html
TFTP – 윈디하나의 솔라나라
http://www.solanara.net/solanara/tftp
Diskless Operation with PXE – freebsd.org
https://www.freebsd.org/doc/handbook/network-diskless.html
NFS 서버설정 – Gentoo wiki / systemd
http://gentoo-en.vfose.ru/wiki/Systemd
gentoo NFS utils
https://wiki.gentoo.org/index.php?title=Nfs-utils&redirect=no
dns option setting with ddwrt
https://www.dd-wrt.com/wiki/index.php/DNSMasq_as_DHCP_server
NFS export setting howto – redhat
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/s1-nfs-server-config-exports.html
NFS mounts as read-only file system
https://ubuntuforums.org/showthread.php?t=1645866
FreeBSD network setting basic
http://www.cyberciti.biz/faq/freebsd-setup-default-routing-with-route-command/

class 변수와 instance 변수에 대한 내용

class 변수는 하위 class 및 하위 class의 instance에서 사용할 수 있는 변수다. (instance에서 superclass에 public으로 접근하는게 아니라 instance creation 과정에서 instance의 private 변수처럼 사용가능한지 조사 필요)

class변수는 class 군에서 array나 Dictionary 들에서 상수의 집합등으로 사용될 수 있다. class내부에서 한번의 초기화만으로 다른곳에서의 초기화를 필요로 하지 않으며, 이는 변수 초기화의 값이 변동되어야 하는 경우 코드의 유지보수를 쉽게한다.

(작성중)